概念
标准广播
一种完全异步执行的广播,所有的广播接收器几乎可以同时收到这条广播,无法被截断。
?
有序广播
一种同步执行的广播,在同一时刻只有一个广播接收器能收到此条广播消息,优先级高的广播接收器先收到广播消息,可以被截断。
?
接收系统广播
注册广播的方式一般有两种,在代码中注册和在AndroidManifest.xml中注册,前者被称为动态注册,后者被称为静态注册。
?
动态注册
优点:可以灵活地控制广播接收器的注册和注销。
核心代码实现:
onCreater():{
intentFilter = new IntentFilter();
//监听网络状态切换时系统发出的广播消息对应的action
intentFilter.addAction(“android.net.conn.CONNECTIVITY_CHANGE”);
networkChangeReceiver = new NetworkChangeReceiver();
//注册广播接收器
registerReceiver(networkChangeReceiver,intentFilter);
}
onDestroy(){
unregisterReceiver(networkChangeReceiver);
}
class NetworkChangeReceiver extends BroadcastReceiver{
onReceiver(){
//填写接收到对应广播时执行的代码 ……
}
}
?
静态注册
优点:在程序未启动时就能接收到广播。
核心代码实现:
//权限配置
//使用AS的快捷方式创建广播接收器时会自动生成receiver配置
//Enable属性表示是否启用这个广播接收器
//Exported属性表示是否允许这个广播接收器接收本程序以外的广播
//配置需要监听的广播对应的action
注意事项
1. onReceive()方法中不能添加过多的逻辑和耗时操作,因为广播接收器中是不允许开线程的。当onReceive()方法运行了较长时间而没有结束时,程序就会报错。
2. 敏感操作需要先配置权限才能进行。
?
发送自定义广播
发送标准广播
核心代码:
onCreate(){
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(“com.example.broadcasttest.MY_BROADCAST”);
//发送标准广播
sendBroadcast(intent);
}
});
}
?
发送有序广播
核心代码:
onCreate(){
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(“com.example.broadcasttest.MY_BROADCAST”);
//发送有序广播,第二个参数是一个与权限相关的字符串
sendOrderedBroadcast(intent,null); }
});
}
?
设置广播接收器的优先级:
//配置优先级为100
?
截断有序广播:
onReceiver(){
//截断广播消息
abortBroadcast();
}
?
使用本地广播
使用本地广播机制发出的广播之能够在应用程序内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。
?
核心代码实现:
onCreate(){
//获取实例
localBroadcastManager = LocalBrocastManager.getInstance(this); button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(“com.example.broadcasttest.LOCAL_BROADCAST”);
//发送本地广播
localBroadcastManager.sendBroadcast(intent); }
});
intentFilter = new IntentFilter(); intentFilter.addAction(“com.example.broadcasttest.LOCAL_BROADCAST”);
localReceiver = new LocalReceiver();
//注册本地广播监听器
localBroadcastManager.regesterReceiver(localReceiver,intentFilter);
}
onDestroy(){
//注销本地广播监听器
localBroadcastManager.unregisterReceiver(localReceiver);
}
?
使用本地广播的优点:
1 不必担心发出的广播泄露数据。
2 其他的程序无法发送广播到我们程序的内部。
3 发送本地广播比发送系统全局广播更加高效。
?