今天遇到程序A关闭后,程序B给A发送广播,但A收不到,这种情况在android3.0(包括3.0,即版本11)以下可以收到,但3.0以上就收不到了。从这篇文章找到了答案http://blog.csdn.net/alex_hx/article/details/7501374;
原来3.0后,安装后从来没有启动过和被用户手动强制停止的应用是收不到广播的;因为系统增加了2个Flag:FLAG_INCLUDE_STOPPED_PACKAGES和FLAG_EXCLUDE_STOPPED_PACKAGES,发送广播时候,Intent默认是FLAG_EXCLUDE_STOPPED_PACKAGES;
所以做了以下修改:
int version=Integer.parseInt(android.os.Build.VERSION.SDK); if (version>11) { //版本12及以上,即3.1及以上 mIntent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); }
或者
int version=android.os.Build.VERSION.SDK_INT; if (version>11) { mIntent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); }
自己写的广播可以添加修改,但系统发送的广播,例如开机广播等就修改不到了,这个问题有待高手回答。