广播接受者是Android四大组件之一,日常开发中可能会遇到的疑问是假设app被杀死了,
注册的广播接受者还能正常接收广播吗。
如果app想在被杀死的情况下接收到广播的话,看以下代码:
发送方:
Intent intent=new Intent(); intent.setAction(""); intent.addCategory(""); intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); this.sendBroadcast(intent);
接受方:
首先在AndroidManifest.xml中
<receiver android:name=".LuncherReceiveer" android:exported="true"> <intent-filter> <action android:name="" /> <category android:name="" /> </intent-filter> </receiver>
LuncherReceiveer里面
public class LuncherReceiveer extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ("".equals(intent.getAction())){ Log.e("收到发过来的消息"); } } }注意:
Intent.FLAG_INCLUDE_STOPPED_PACKAGES这个flag必须加上,从android3.1开始,android为了防止无意或者不必要
的开启未启动的app服务,设置了两个flag,分别为FLAG_INCLUDE_STOPPED_PACKAGES
(表示包含未启动的App)和FLAG_EXCLUDE_STOPPED_PACKAGES(表示不包含未启动的App),
控制intent是否对处于停止状态的app起作用。
有些手机因为有自启动权限管理,如华为和小米,需要把app的自启动打开才能正常。而且有些童鞋说必须得停止状态的app启动过一次才能代码生效,我测试了一下,把测试包装到手机上,不打开,然后发送广播,发现app还是能打开。