2018年05月07日 21:03:14
阅读数:431
最近在回看第一行代码时,做书上有关广播的例子时,发现高版本的android系统,对于广播的接收变得越来越严格,
导致自己写的demo中收不到广播,看了官网上的一些介绍 附上链接 :
https://developer.android.google.cn/about/versions/oreo/features/background-broadcasts
原来在Android6,将该应用安装到Android7系统上面可正常使用,但是安装到Android8上面广播的接收不到广播
1. 问题的前提:本人维护的一个应用是通过按键发送一个自定义广播,然后拉起服务。原来项目开发是在Android6,将该应用安装到Android7系统上面可正常使用,但是安装到Android8上面,死活收不到广播。通过百度参考了两篇文章(文章最后加备注),做了以下总结:
2.原因:Android8在静态广播的使用上做了一些限制具体可查看:https://developer.android.google.cn/about/versions/oreo/android-8.0.html
3. 解决办法:
(1)使用动态广播代替静态广播,具体可参考博客1。
(2)保留原来的静态广播,但是加入Component参数,具体可参考博客2
具体的解决办法就是
Intent intent =new Intent( "com.example.wenhaibo.androidstudy_broadcast02.MY_BROADCAST" );
intent.setComponent( new ComponentName( "com.example.wenhaibo.androidstudy_broadcast02" ,
"com.example.wenhaibo.androidstudy_broadcast02.MyBroadCastReceiver") );
sendBroadcast( intent );
在 sendBroadcast(intent)方法之前,用intent 对象调用一下 setComponent( new ComponentName(''参数一'',''参数二'')) 参数一是你的包名,参数二是你的接收器的路径。