【Android异常】关于静态注册BroadcastReceiver接收不到系统广播的问题
如果你静态注册的广播无法接收到消息,请先检查下:你的安卓版本是不是8.0+
前言
Google官方声明: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(API26)开始,对清单文件中静态注册广播接收者增加了限制,建议大家不要在清单文件中静态注册广播接收者。
其实说白点:就是因为在清单文件中静态注册广播接收者,容易让一些"不法分子"获取用户的隐私(如:电话监听、短信监听等等),所以google限制了静态注册
解决方案(以android.intent.action.BATTERY_CHANGED为例):
动态注册不能放到activity中,因为动态注册必须要在activity消亡的时候调用unregisterReceiver,会随着activity的解锁消失而不能再接收广播。一般的办法是在activity起来后马上start一个service,这个service里动态注册一个broadcastreceiver,service必须常驻在系统内,所以要接收开机消息android.intent.action.BOOT_COMPLETED。
最新文章
- 关于layui
- 使用postMesssage()实现跨域iframe页面间的信息传递----转载
- 非IE内核浏览器支持activex插件
- 解决右滑返回手势和UIScrollView中的手势冲突
- IIC总线协议
- Mac实用技巧
- 【floyd求最小环】【Vijos 1046】【观光旅游】
- VMware vSphere 服务器虚拟化之二十 桌面虚拟化之准备虚拟桌面模版
- JAVA基础3——常见关键字解读(2)
- HashMap,LinkedHashMap,TreeMap对比
- LeNet-5识别MINIST数据集
- 笔记:Jersey REST 传输格式-XML
- ltp-ddt emmc_dd_rw
- Keepalive+nginx实现高可用负载均衡方案
- 《Mysql 字符集》
- whith ~ as 用法
- iOS8 生成二维码与条形码
- An Insight to References in C++
- Oracle SQL语句操作数字:取整、四舍五入及格式化
- 8 个用于业余项目的优秀 Python 库