我有一个活动A,它有套接字通信,我要打开活动B,只需单击一个来自活动A的按钮。
public void onClick(View v) {
//open preferences activity
intent = new Intent(MainActivity.this, PreferencesActivity.class);
//using some bundle here to send data
.....
MainActivity.this.startActivityForResult(intent, 1);
}现在,如果在活动A中发生任何套接字通信,那么我必须在活动B中标识(在活动A中发生的一些通信),并且需要关闭活动B并将活动A带到前台。套接字通信如下所示。
ConnectSocket();
while (true) {
//wait for socket client
socClient = (SSLSocket) sslServerSocket.accept();
//once socket is connected send it back to activity
if (socClient != null) {
if (socketThread != null) {
connectedSocket = socClient;
socClient = null;
communicationThread = new ReadSocketThread();
communicationThread.start();
}
}
}
} 这里的ReadsocketThread()是一个读取套接字消息的线程。
如何通知活动B在活动A中发生了一些事情。我尝试使用处理程序发送消息,但没有成功,因为活动A中的处理程序从不向活动B发送消息。作为一个初学者,可能是我没有正确使用。
发布于 2017-01-18 12:43:15
一种变通方法是在安卓中使用EventBus。要使用EventBus:
compile 'org.greenrobot:eventbus:3.0.0'然后,创建一个事件来接收来自活动A的消息
public class HelloWorldEvent {
private final String message;
public HelloWorldEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}然后从活动A创建一个发送方:
EventBus.getDefault().post(new HelloWorldEvent("Hello EventBus!”);然后,您可以根据需要添加任意数量的侦听器,就像在活动B中一样:
@Subscribe
public void onEvent(HelloWorldEvent event){
// your implementation
Toast.makeText(getActivity(), event.getMessage(), Toast.LENGTH_SHORT).show();
}所以,这里发生的事情是,每当从活动A调用EventBus.getDefault().post(new HelloWorldEvent("Hello EventBus!”);时,您将在活动B中获得Toast,您可以在那里传递您喜欢的消息。[here]提供了一个关于EventBus的更详细的示例
发布于 2017-01-18 20:09:27
我为我的场景找到了另一个简单的解决方案,因为我不需要在活动之间传递任何消息,而是在套接字通信时希望关闭活动B并将活动A带到前台。我在没有使用任何广播或事件总线的情况下实现了这一点,只需使用
startActivityForResult(intent, somerequestcode);当有到活动A的通信时,只需在适当的位置调用
finishActivity(somerequestcode);注意: somerequestcode可以是任意整数
https://stackoverflow.com/questions/41711349
复制相似问题