Android实现非Activity与Activity数据传输

来源:互联网 发布:淘宝联盟优惠券怎么用 编辑:程序博客网 时间:2024/05/21 09:38

我之前在做TCP通讯时,tcp的具体实现代码我给单独写在一个类了,导致后面我Activity拿不到数据,后面我网上找了很久都没有资料,我现在解决了就写出来,希望能帮到遇到我同样问题的人,也是做写笔记,以便以后自己使用。

在非Activity中需要实现的代码如下:

Intent intent = new Intent();intent.setAction("tcpServerReceiver");intent.putExtra("tcpServerReceiver", rcvMsg2);VideoViewActivity.context.sendBroadcast(intent);//将消息发送给主界面
“rcvMsg2”是接收到的数据,但这数据已经被我特殊处理,"VideoViewActivity.context.sendBroadcast(intent);"这是以广播的形式
给Activity发消息
在Activity中需要实现的代码如下:
private TextView txtRcv;
private final MyHandler myHandler = new MyHandler(this);private MyBroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();@SuppressLint("StaticFieldLeak")public static Context context;
private class MyHandler extends Handler {        private final WeakReference<FuncTcpServer> mActivity;        MyHandler(FuncTcpServer activity) {            mActivity = new WeakReference<FuncTcpServer>(activity);        }        @Override        public void handleMessage(Message msg) {            FuncTcpServer activity = mActivity.get();            if (activity != null) {                switch (msg.what) {                    case 1:                        txtRcv.append(msg.obj.toString());//这是把接收到的消息显示到当前UI界面                        KLog.e(msg.obj.toString());                        break;                }            }        }    }    private class MyBroadcastReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            String mAction = intent.getAction();            switch (mAction) {                case "tcpServerReceiver":                    String msg = intent.getStringExtra("tcpServerReceiver");                    Message message = Message.obtain();                    message.what = 1;                    message.obj = msg;                    myHandler.sendMessage(message);                    break;            }        }    }
接着还要在onCreate()中注册广播接收器和初始化
context = this;
IntentFilter intentFilter = new IntentFilter("tcpServerReceiver");registerReceiver(myBroadcastReceiver, intentFilter);

这样就大功告成了,博客写的不多,写的不好请见谅,有什么不懂的可以找我。