上面所说即:若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:*******