如果你看到这篇文章 相信你已经在适配 8.0 各种莫名其妙的 bug 苦恼
笔者在适配 8.0 发现, xml 注册的静态广播无法接收
先说明问题出现的根本原因
google 官方文档
解释一下
https://developer.android.com/guide/components/broadcasts.html#receiving_broadcasts
Beginning with Android 8.0 (API level 26), the system imposes additional restrictions on manifest-declared receivers.
If your app targets API level 26 or higher, you cannot use the manifest to declare a receiver for most implicit broadcasts (broadcasts that do not target your app specifically).
在 Android 8.0 及以上 在 xml 中注册的广播, 在接收的时候收到了额外的限制, 如果你的 app 目标等级是 26 及以上, 将无法接收到 xml 注册的广播
这是 google 为了 app 注册的静态广播导致耗电加的限制
既然 google 已经都这么规定了, 想反抗是万万不能的, 但是解决办法还是有的
办法一:
使用动态广播 registerReceiver 注册形式, 这个不受限制 (推荐)
办法二:
gradle 中的 targetSdkVersion 设置小于 26
附上 查询已经注册的 Receiver code
PackageManager pm = getPackageManager();
List < ResolveInfo > resolveInfos = pm.queryBroadcastReceivers(intent, 0);
for (int i = 0; i < resolveInfos.size(); i++) {
Log.e("resolveInfos", "resolveInfos---" + resolveInfos.get(i).toString());
}
来源: http://www.jianshu.com/p/984a128f5463