解决静态广播接收器不能接收隐式广播的问题

Posted Winston Wood

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决静态广播接收器不能接收隐式广播的问题相关的知识,希望对你有一定的参考价值。

android 8.0以上(Build.VERSION.SDK_INT>=26)版本,如果:
1)BroadcastReceiver在AndroidManifest.xml中静态注册;
2)发送隐式广播。
这个时候,系统会报出以下错误:
BroadcastQueue: Background execution not allowed: receiving Intent…
解决方法有三种:

  1. 在代码中动态注册BroadcastReceiver;
  2. 发送显式广播,即指定包名类名;
  3. 在Intent中增加flag Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND。

    但由于FLAG_RECEIVER_INCLUDE_BACKGROUND被加了**@hide注解,所以应用层代码无法找到该变量(无法成功编译代码).

    所以只能硬编码为intent.addFlags(0x01000000)。

    发现在Android Studio中代码还是标红,尽管可以成功编译,但实际上该行代码并没有编译并打包到apk里面。

    解决的方案是在方法上加上
    @SuppressLint(“WrongConstant”)**就可以了。

参考资料

  1. https://blog.csdn.net/wangwei890702/article/details/99644607
  2. android.content.Intent.java

以上是关于解决静态广播接收器不能接收隐式广播的问题的主要内容,如果未能解决你的问题,请参考以下文章

解决静态广播接收器不能接收隐式广播的问题

我的Android进阶之旅解决Android8.0发送自定义广播接收不到的问题:PackageManager扫描静态注册广播接收器拿到ResolveInfo,指定包名和完整路径,然后发送自定义广播(代

Android8.0限制隐式广播的原因和解决方案

不运行时接收消息,Xamarin Android上的显式广播和隐式广播

Android本地广播的使用

Android基础——广播(静态注册)