/**
*
* 广播的分类:
* 无序:异步执行---接收器几乎同时接受到---- 跟优先级无关----效率高--不能截断
* 有序:同步执行---一次只能有一个接收器接受到,有序传递---根据优先级决定顺序---效率低---可截断
*
* 发送方:
* 系统广播
* 自定义广播
*
* 广播接收器:
* 注册广播
* 静态:Manifest.xml
* 动态:就是在代码中注册
* 和组件绑定的时候,如果 在activity中注册,activity存活的时候才能接受广播
* context.registerReceiver onCreate() onResume()
* 取消注册广播
* context.unregisterReceiver onDestory() onPause()
*
* 发送广播
* 应用自己的广播
* 无序广播: sendBroadcast(intent)
* 有序广播: sendOrderedBroadcast(intent,);
* 优先级:-1000~1000,字数越大,优先级越高,默认为0
* filter.setPriority(100);//优先级
* 拦截广播
* 无序广播里面不能调用abortBroadcast()拦截
* 有序广播拦截abortBroadcast()//优先级比我低的接收不到
*
* 本地广播管理:
* 初衷:安全性
* LocalBroadcastManager
* registerReceiver
* unregisterReceiver
* sendBroadcast
* sendOrderedBroadcast
* abortBroadcast
*
* 广播接收器:onReceive() 运行在主线程中,一般不开启线程,经常发送通知,跳转等不耗时的操作
*
*/
静态注册:
<receiver
android:name=".MyReceiver"
android:exported="true">
<intent-filter>
<!-- BOOT_COMPLETED 启动完成 -->
<!-- 8.0+ 不推荐静态注册方式 -->
<action android:name="android.intent.action.BOOT_COMPLETED" />
<!-- 网络连接发生变化 -->
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<!-- 接受开机启动广播的权限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- 添加访问网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
动态注册
//动态注册
receiver=new MyReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
filter.addAction("com.hfzy.mydome0812.MyBroadCast");
filter.setPriority(100);//优先级
registerReceiver(receiver,filter);//广播监听器,监听哪些
class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//当接受到的广播的时候,会执行到这里
}
//取消注册
unregisterReceiver(receiver);
发送广播
Intent intent=new Intent();
intent.setAction("com.hfzy.mydome0812.MyBroadCast");//广播名称可以自己定义,唯一可识别
//发送无序广播
sendBroadcast(intent);
//发送有序广播
sendOrderedBroadcast(intent,null);
//本地广播
private LocalBroadcastManager localBroadcastManager;
localBroadcastManager=LocalBroadcastManager.getInstance(this);
localBroadcastManager.sendBroadcast(intent);