Android Oreo上的广播接收器

时间:2018-06-11 13:33:19

标签: android android-studio broadcastreceiver android-8.0-oreo

我有一个网络更改接收器类,它从广播接收器扩展,但我不确定它是否在android Oreo中工作,Oreo是否支持广播接收器,如果它不支持,那么另一种方式是什么做到这一点

2 个答案:

答案 0 :(得分:7)

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

隐式与显式广播:

According to the documentation,隐式广播是一种不专门针对该应用的广播。例如,ACTION_PACKAGE_REPLACED是隐式广播,因为它被发送给所有已注册的侦听器,让他们知道设备上的某些包已被替换。

但是,ACTION_MY_PACKAGE_REPLACED不是隐式广播,因为它只发送给其软件包被替换的应用程序,无论有多少其他应用程序为该广播注册了监听器。

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

这种改变的原因是隐式广播之前会触发在清单中监听它们的任何组件 - 这可能会对应用程序和设备性能产生负面影响,因为大量应用程序已注册接收特定广播在同一时间触发。

但是当涉及隐式广播时,有一个例外列表 - 这意味着仍然有一些你可以注册接收广播。它们都列在下面:

enter image description here

因此,如果您已注册接收者的广播在此列表中,那么它仍将像以前一样运行。但是,如果您已注册接收的广播不在此列表中,那么您应该使用一些替代解决方案,如:

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

For more information

答案 1 :(得分:1)

Oreo不支持它作为清单标记,您必须使用context.registerReceiver()在Service / Activity中注册它。或者您使用WorkManager为特定网络条件安排某些事情。