分类
标准广播
同一时刻接收,不可以截断
有序广播
优先级高的先接收到广播,并且可以截断
注册方式
动态注册
在代码中注册
ps:只能是程序启动的时候接收广播
1.创建新类继承自 BroadcastReceiver,并重写父类的 onReceive()方法,用作接收广播时的逻辑处理方法体
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show();
}
}
2.接着在onCreate()中创建IntentFilter对象和BroadcastReceiver对象,调用方法registerReceiver() 广播注册
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
NetworkChangeReceiver networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver, intentFilter);
3.最后在onDestroy()进行注销广播
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(netwrokChangeReceiver);
}
静态注册
在 AndroidManifest.xml 中注册
ps:程序在未启动的情况下就能接收到广播
1.同动态注册一样,需要创建新类继承 BroadcastReceiver,实现方法onReceive()
2.在 AndroidManifest.xml 文件中进行注册(类似activity的操作)
//BOOT_COMPLETED是开机广播的action
<receiver
android:name=".BootCompleteReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
自定义广播
1.选择动态或者静态注册方式进行注册
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.broadcasttest.MY_BROADCAST"/>
</intent-filter>
</receiver>
2.通过Intent发送广播
Intent intent = new
Intent("com.example.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);
发送有序广播(区别于标准广播)
1.方法由sendBroadcast(intent);变为sendOrderedBroadcast(intent, null);
Intent("com.example.broadcasttest.MY_BROADCAST");
sendOrderedBroadcast(intent, null);
2.设置优先级(在intent-filter中添加标签priority=“100”)
<intent-filter android:priority="100">
<action android:name="com.example.broadcasttest.MY_BROADCAST" />
</intent-filter>
3.截断广播
//在BroadcastReceiver中的onReceive()方法中进行截断
abortBroadcast();
本地广播(程序内部)
ps:本地广播是无法通过静态注册的方式来接收的,因为在程序内部传送,程序已经启动了呀
1.获取LocalBroadcastManager对象
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this); // 获取实例
2.通过LocalBroadcastManager对象发送广播和注销广播
localBroadcastManager.sendBroadcast(intent);
localBroadcastManager.unregisterReceiver(localReceiver);
广播接收器更多的是扮演一种打开程序其他组件的角色,比如创建一条状态栏通知,或者启动一
个服务等 不能在onReceive()中开启线程