【Anroid学习笔记】 广播接收器的基本使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/A1344714150/article/details/100155549

概念

标准广播

一种完全异步执行的广播,所有的广播接收器几乎可以同时收到这条广播,无法被截断。

 

有序广播

一种同步执行的广播,在同一时刻只有一个广播接收器能收到此条广播消息,优先级高的广播接收器先收到广播消息,可以被截断。

接收系统广播

注册广播的方式一般有两种,在代码中注册和在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(){
 //填写接收到对应广播时执行的代码 ...... 
} 
}

静态注册

优点:在程序未启动时就能接收到广播。

核心代码实现:

<manifest ...> 
//权限配置 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<application> 
//使用AS的快捷方式创建广播接收器时会自动生成receiver配置 
//Enable属性表示是否启用这个广播接收器 
//Exported属性表示是否允许这个广播接收器接收本程序以外的广播 
<receiver android:name=".BootCompleteReceiver" android:enable="true" android:exported="true"> 
//配置需要监听的广播对应的action 
<intent-filter> 
<action android:name="android.intent.action.BOOT_COMPLETED"/> 
</intent-filter> 
</receiver> 
</application> 
</manifest>

注意事项

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); } 
});
}

设置广播接收器的优先级:

<mainfest> 
<application> 
<receiver> 
//配置优先级为100 
<intent-filter android:priority="100"> 
<action android:name="com.example.broadcasttest.MY_BROADCAST"/> 
</intent-filter> 
</receiver> 
</application> 
</mainfest>

截断有序广播:

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 发送本地广播比发送系统全局广播更加高效。

猜你喜欢

转载自blog.csdn.net/A1344714150/article/details/100155549