忙啊~最近好忙呀。
这篇文章偷个闲,记录下 Android8.0 上的新增的广播限制。
零、前言
最近在基于 Android 8.1 的系统项目中有用到静态注册广播去监听广播。可是不论我是普通的将Apk install进去抑或是高贵的push到对应的system/priv-app/目录下,都收不到这个广播。心态,DUANG,炸了。
后来灵光一闪,扒出记忆角落的Android7.0的广播限制,赶紧Google一下。原来如此,恍然大悟:Android8.0后,当App targetSDK >= 26,几乎禁止了所有的隐式广播的静态注册监听。 特在此记录,防止我以后又提莫的忘记了。
本篇文章主要讲述以下内容,还请拿起小板凳,带好零食,前来观赏:
- Android广播科普
- Android8.0的后台限制
- 具体广播限制和对应赦免清单
- 适配/解决方法
一、科普科普广播知识
来来来,先科普下,广播两种监听/接收注册方式和两种类型,拿小本本记下来,记住了!
注册方式:
- 静态注册:也称为清单注册,就是在AndroidManifest.xml中注册的广播。此类广播接收器在 应用尚未启动 的时候就可以接收到相应广播。
- 动态注册:也称为运行时注册,也就是在Service或者Activity组件中,通过Context.registerReceiver()注册广播接收器。此类广播接收器是在应用已启动后,通过代码进行注册。
两种类型:
- 显式广播(Explicit Broadcast):发送的Intent是显示Intent的广播。通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,去调用以下方法。意图明确,指定了要激活的组件是哪个组件,一般是在相同的应用程序内部实现的。
Intent.setComponent()
Intent.setClassName()
Intent.setClass()
new Intent(A.this,B.class)