如何在广播接收器中通知正在运行的活动?

29

我有一个活动,它需要对广播事件进行响应。 由于活动不能同时作为广播接收器, 所以我创建了一个广播接收器。

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


请查看此链接 https://dev59.com/cVwZ5IYBdhLWcg3wPONM#59961601 - Ketan Ramani
1个回答

41
广播是一种通知。如果你想基于接收到的广播启动活动或服务等,那么你需要一个独立的广播接收器并将其放在清单文件中。但是,如果你想让你的活动本身响应广播,则在活动中创建广播接收器实例并在那里注册它。
我使用的模式是:
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 方法中,根据需要执行必要的操作,以使活动在接收广播时按照所需方式做出反应。


12
那么你需要在活动中定义接收器吗?如果你想让该行为在你的整个应用程序中执行呢? - shim
进一步澄清:String BROADCAST_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"; 如果您想在整个应用程序中实现某种行为,您是否可以在扩展Application类的类中编写代码? - Sunshinator
如果活动没有启动,广播就会丢失?这可能不是我们想要的结果。 - kodu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接