一:广播的注册
广播作为安卓四大组件之一,自然也要注册。广播的注册分为动态注册和静态注册。
动态注册:
IntentFilter intentFilter = new IntentFilter();
//获得IntentFilter的实例
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
//监听android.net.conn.CONNECTIVITY_CHANGE这个广播
NetworkChangeReceiver networkChangeReceiver = new NetworkChangeReceiver();
//获得广播接收器的实例,有些广播接收器需要自己创建,有些事系统带有的
localBroadcastManager.registerReceiver(networkChangeReceiver, intentFilter);
//最后调用registerReceiver进行注册
注意:动态注册的广播接收器一定要在onDestroy()中取消注册 unregisterReceiver(networkChangeReceiver),当然还有权限问题也要注意
静态注册:
<receiver android:name=".MyBroadcastReceiver" >
//MyBroadcastReceiver是自定义的广播接收器接受com.example.broadcasttest.MY_BROADCAST这个广播
<intent-filter android:priority="100">
<action android:name="com.example.broadcasttest.MY_BROADCAST"></action>//添加广播
</intent-filter>
</receiver>
在AndroidManifest中为intent-filter添加广播
注意:静态注册主要是为了让程序未启动也能接受广播,例如开机启动
二:自定义广播
1.标准广播
Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
//把要发送的广播的值传入Intent
sendBroadcast(intent);
//调用sendBroadcast发送广播
所有监听此广播的广播接收器都能接受到此广播
2.有序广播
当有两个或以上的广播接收器监听同一广播时,静态注册广播接受器A设置优先级为100
<intent-filter android:priority="100">
并且在A的代码中onReceive()方法中调用abortBroadcast()方法,截断此广播
当然还要把发送广播的方法改为sendOrderBroadcast(intent)
因此只有A才能接受到此广播
三:本地广播
使用这个机制发出的广播只能在此程序内部传递,也只能接受本程序的广播
本地广播主要用LocalBroadcastManager来对广播进行管理
1.首先调用LocalBroadcastManager的getInstance()方法获得LocalBroadcastManager的实例;
private LocalBroadcastManager localBroadcastManager = LocalBroadcastManager .getInstance(this);
2.调用LocalBroadcastManager的registerReceiver方法进行注册
3.调用LocalBroadcastManager的sendBroadcast方法发送广播
注意:本地广播无法通过静态注册方式来接受