【问题标题】:how can I notify a running activity from a broadcast receiver?如何从广播接收器通知正在运行的活动?
【发布时间】:2011-03-08 13:04:44
【问题描述】:

我有一个活动,它需要响应广播事件。 由于一个活动不能同时是一个广播接收者, 我做了一个广播接收器。

我的问题是:如何从广播接收器通知活动? 我相信这是一种常见的情况,那么有没有设计模式呢?

【问题讨论】:

标签: android ipc broadcastreceiver


【解决方案1】:

广播就是通知。 :) 如果您想说,根据收到的广播启动活动或服务等,那么您需要一个独立的广播接收器并将其放入清单文件中。但是,如果您希望您的 Activity 本身响应广播,那么您可以在您的 Activity 中创建一个广播接收器的实例并在那里注册它。

我使用的模式是:

public class MyActivity extends Activity {
    private BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(...) {
            ...
        }
   });

    public void onResume() {
        super.onResume();

        IntentFilter filter = new IntentFilter();
        filter.addAction(BROADCAST_ACTION);

        this.registerReceiver(this.receiver, filter);
    }

    public void onPause() {
        super.onPause();

        this.unregisterReceiver(this.receiver);
    }
}

因此,通过这种方式,接收器在创建类时被实例化(也可以在 onCreate 中进行)。然后在 onResume/onPause 我处理注册和注销接收器。然后在接收者的onReceive 方法中,我会做任何必要的事情来使活动在接收到广播时按照我想要的方式做出反应。

【讨论】:

  • 所以你必须在activity内部定义receiver?如果您希望在整个应用程序中使用这种行为怎么办?
  • 进一步澄清:String BROADCAST_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"; 另外,我希望在整个应用程序中都有一个行为,你不能在扩展 Application 的类中获取代码吗?
  • 那么如果activity没有STARTED,广播就丢失了?这可能是不可取的。
猜你喜欢
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2018-03-13
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多