一、动态注册
在活动activity中建立内部类并继承BroadcastReceiver(创建广播接收器),
在方法onReceive(Context context,Intent intent)中实现接受到广播后的逻辑。
在活动activity中的onCreate方法中监听并注册需要接收的广播,
在onDestroy中注销广播
例:
onCreate(){
IntentFilter intentFilter - new IntentFilter();
intentFilter.addActicon("广播名");
广播类 广播对象 = new 广播构造函数();
registerReceiver(广播对象,intentFilter);
}
onDestroy(){
super.onDestroy();
unregisterReceiver(广播对象);
}
注:
1、有些权限可能会遇到隐私问题,此时需要在AndroidManifest.xml文件中申明权限
2、广播的onReceive方法里不允许开启多线程,并且不要在里面进行耗时操作,如果在此方法中运行了较长时间而没结束就会使程序报错。
3、广播接收器更多的是打开程序的其他组件,或者启动一个服务
4、动态注册广播必须要将应用启动才可以监听,因为是在活动中的oncreate方法中
二、静态注册(让程序在未启动的情况下就能接收到广播)
新建广播,自动在AndroidManifest.xml中注册该广播(必须要在该文件中注册,如果代码编辑器没有自动创建就自己创建),
在AndroidManifest.xml中监听需要接收的广播
在onReceive中实现接受到广播后的具体逻辑
例:
AndroidManifest.xml
<receiver
android:name=".广播类"
android:enabled="true"//是否启用这个广播
android:exported="true">//是否允许接受本程序以外的广播
<intent-filter>
<action android:name="广播名"/>
</intent-filter>
</receiver>
发送标准广播
Intent intent = new Intent("广播名");
sendBroadcast(intent);
发送有序广播(可截断广播,按顺序传递广播)
sendOrderedBroadcast(intent,null);//第二个参数是一个与权限相关的字符串
//设定广播接收器的先后顺序
AndroidManifest.xml
<receiver
android:name=".广播类"
android:enabled="true"//是否启用这个广播
android:exported="true">//是否允许接受本程序以外的广播
<intent-filter android:priority="100">//设定优先级
<action android:name="广播名"/>
</intent-filter>
</receiver>
//设定是否阶段广播的传播
在onReceive中调用abortBroadcast()方法表示截断这条广播
三、本地广播LocalBroadcastManager
前面的发送接收的都是系统全局广播,容易造成安全性问题。例:接收到垃圾数据,传递关键数据被截获
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(context:this);
localBroadcastManager.sendBroadcast(intent);//发送本地广播
//其他都不变,只有注册有变化 本地广播
localBroadcastManager.registerReceiver(广播对象,intentFilter);
//取消注册
localBroadcastManager.unregisterReceiver(广播对象);
注:1、本地广播无法通过静态注册的方式来接收。
2、发送本地广播比发送系统全局广播更加高效。
总结
越是基础,越是重要