我之前在做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);
這樣就大功告成了,博客寫的不多,寫的不好請見諒,有什麼不懂的可以找我。