首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android activity to activity通信

问android activity to activity通信
EN

Stack Overflow用户
提问于 2017-01-18 12:28:23
回答 2查看 1K关注 0票数 0

我有一个活动A,它有套接字通信,我要打开活动B,只需单击一个来自活动A的按钮。

代码语言:javascript
复制
        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带到前台。套接字通信如下所示。

代码语言:javascript
复制
 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发送消息。作为一个初学者,可能是我没有正确使用。

EN

回答 2

Stack Overflow用户

发布于 2017-01-18 12:43:15

一种变通方法是在安卓中使用EventBus。要使用EventBus:

代码语言:javascript
复制
compile 'org.greenrobot:eventbus:3.0.0'

然后,创建一个事件来接收来自活动A的消息

代码语言:javascript
复制
    public class HelloWorldEvent {
    private final String message;

    public HelloWorldEvent(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

然后从活动A创建一个发送方:

代码语言:javascript
复制
EventBus.getDefault().post(new HelloWorldEvent("Hello EventBus!”);

然后,您可以根据需要添加任意数量的侦听器,就像在活动B中一样:

代码语言:javascript
复制
    @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的更详细的示例

票数 0
EN

Stack Overflow用户

发布于 2017-01-18 20:09:27

我为我的场景找到了另一个简单的解决方案,因为我不需要在活动之间传递任何消息,而是在套接字通信时希望关闭活动B并将活动A带到前台。我在没有使用任何广播或事件总线的情况下实现了这一点,只需使用

代码语言:javascript
复制
 startActivityForResult(intent, somerequestcode);

当有到活动A的通信时,只需在适当的位置调用

代码语言:javascript
复制
finishActivity(somerequestcode);

注意: somerequestcode可以是任意整数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41711349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档