android隐式广播和显式广播是什么,在Android8.0上突破隐式广播的限制

在Android 8.0及以上版本,静态注册的隐式广播受到限制,仅豁免的Broadcast可以接收到。为解决这个问题,可以考虑动态注册广播接收器,或者在发送广播时指定包名发送显式广播。如果需要接收系统广播但无法动态注册,可以尝试将targetSdkVersion降低,但此方法不可持续。通过分析源码,发现可以通过添加FLAG_RECEIVER_INCLUDE_BACKGROUND标志位来突破隐式广播限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5283ebc225d5?utm_source=oschina-app

上面所说即:若App的TargetSDK达到了26, 我们正常静态注册的广播就没有用了。能用的仅有以下豁免的Broadcast, 包括我们自己正常发广播,如果不指定包名, 静态注册的也是收不到的。PS:动态注册是没有影响的

在我们收不到广播的时候,系统会有如下打印,即这个后台的广播接收器不会被执行

04-21 04:12:27.513 2431 4821 W BroadcastQueue: Background execution not allowed:******************

如何应对这一限制

知道了上面的限制后,我们正常的应对方式为

能动态注册,就不静态注册

如果一定要静态注册, 发送的时候指定包名,即发送显式广播

如果要接收系统广播,而对应的广播在Android8.0中无法被接收,那么只能暂时把App的targetSdkVersion改为25或以下,但这招已经不顶用了,工信部要求targetSDK必须26以上

如果我们不想发显式广播(因为我们不知道有谁要收广播),对方又不能动态注册,只能静态注册(许多应用希望是被动唤醒),我们应该怎么办呢?

我们看上面的异常:

04-21 04:12:27.513 2431 4821 W BroadcastQueue: Background execution not allowed:*******

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值