Android Oreo上的广播接收器

8

我有一个网络变化接收器类,它扩展自广播接收器,但我不确定它是否在Android Oreo中正常工作。请问Oreo是否支持广播接收器?如果不支持,有什么其他方法可以实现?


你可以尝试使用这个 https://github.com/devggaurav/BroadcastReceiver-For-Naught-and-Oreo-devices - Danial clarc
2个回答

16

Oreo支持广播接收器,但对在清单中声明的隐式广播有一些限制。

隐式广播 vs 显式广播:

根据文档,隐式广播是指不专门针对该应用程序的广播。例如,ACTION_PACKAGE_REPLACED 是一个隐式广播,因为它被发送到所有已注册的侦听器,告诉它们设备上的某些包已被替换。

然而,ACTION_MY_PACKAGE_REPLACED 不是隐式广播,因为它只被发送到其包已被替换的应用程序,无论多少其他应用程序已为该广播注册了侦听器。

因此,在我们的应用程序清单中静态定义的任何广播接收器如果监听隐式广播,则将不再接收这些广播。

更改原因是隐式广播以前会触发清单中正在侦听它们的任何组件,这可能会对应用程序和设备性能产生不利影响,因为大量应用程序注册以接收特定广播,而这些应用程序会同时被触发。

但是在隐式广播方面有一些例外情况 - 这意味着仍然可以注册以接收广播的某些广播。它们全部列在下面:

enter image description here

因此,如果您已为其注册接收器的广播在此列表中,则其功能将像以前一样运行。但是,如果您已注册要接收的广播不在此列表中,则应使用其他替代解决方案,例如:

  • 通过调用Context.registerReceiver()在运行时创建接收器,而不是在清单中声明接收器。
  • 使用定期作业检查将触发隐式广播的条件。

更多信息


如果我们使用未被允许的广播会发生什么?它会无法工作还是应用程序会崩溃? - Rajesh K
@RajeshK 在这种情况下,你的应用程序将不会接收到广播,应用程序也不会崩溃。 - Rahul Sahni

3

在 Oreo 中不支持使用清单标签进行广播接收器的注册,您必须使用 context.registerReceiver() 在服务/活动中进行注册。或者您可以使用 WorkManager 来安排特定网络条件下的某些任务。


如果我们使用未经许可的广播会发生什么?它会无法工作还是应用程序会崩溃? - Rajesh K

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