android活动到活动沟通

时间:2017-01-18 04:28:23

标签: android

我有一个活动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发送消息。作为初学者,可能是我没有正确使用。 / p>

2 个答案:

答案 0 :(得分:0)

解决方法是在Android中使用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,您可以在那里传递您的首选消息。关于EventBus的更详细示例可用[here]

答案 1 :(得分:0)

我为我的场景找到了另一个简单的解决方案,因为我不需要在活动之间传递任何消息,而是在套接字通信上想要关闭活动B并将活动A带到前台。我只使用

打开活动B就可以在不使用任何广播或事件总线的情况下实现此目的
 startActivityForResult(intent, somerequestcode);

当与活动A进行通信时,在适当的位置只需致电

finishActivity(somerequestcode);

注意:somerequestcode可以是任何整数