BroadcastReceiver 静态注册方式接收不到消息的问题
接收消息有两种方式一个是采用静态的方式在AndroidManifest.xml 中进行注册,一个是在动态的代码中使用IntentFilter 设置action进行注册,在使用中发现在Android 8.0 中采用发送广播后接收时 设置相同的action 在动态的代码中注册可以接收到消息,但是,在静态中进行注册就不能接收到消息,
对这个问题的总结入下,在Android 8.0中加强了广播的安全性设置,在发送广播时需要注意的是,如果采用静态注册遇到以上问题有两种解决方案
1、设置接收的组件对象
发送中Intent对象需要设置接收的对象采用
intent.setComponent()方法创建使用这个接收消息的对象如:
intent.setCompontent(new Compontent("包名",“接收类的路径”))
这样在接收时就可以知道是哪一个类在接收,但是这样做比较死板,不能修改类名称,不能修改包名。
2、设置发送和接收的权限
需要自己定义一个发送权限,即在使用sendBroadcast()时,采用有权限参数的方式发送,在接收的AndroidManifest.xml 中定义该权限,并在recriver中使用这个权限。
以上两种方式亲测都是可以使用的。