Android實現非Activity與Activity數據傳輸

我之前在做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);

這樣就大功告成了,博客寫的不多,寫的不好請見諒,有什麼不懂的可以找我。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章