一、注册
1.1 静态注册:常驻广播,应用退出Receiver仍然可以接收到广播
静态注册广播,定义name action category
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.MY_BROADCAST"/>
<category android:name=",android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
定义广播接收器
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//接收外界发送的广播
}
}
向广播接收器发送广播
Intent intent = new Intent("android.intent.action.MY_BROADCAST");
sendBroadcast(intent);
1.2 动态注册:动态注册的广播 注册后必须在合适的地方(onDestroy)解注册。
代码中动态注册:
MyReceiver receiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(“android.intent.action.MY_BROADCAST”); //添加action
registerReceiver(receiver, filter);
代码中动态解注册
unregisterReceiver(receiver);
发送广播和静态注册广播一样
Intent intent = new Intent(“android.intent.action.MY_BROADCAST”);
sendBroadcast(intent);
二、广播类型
2.1 普通广播
所有接受者完全异步,相互之间互不影响。
2.2 有序广播
每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止广播。
有么有责任链模式的感觉?
优先级的定义: 数字越大,优先级越高,范围-1000到1000
发送有序广播:sendOrderedBroadcast();
优先级最高的接收器先接收到广播
拦截广播,abortBroadcast();
不拦截,可以通过setResultExtras将广播传递给下一个优先级的接收器(可将原始内容修改,生成新的bundle传递给下一个)。
注意:有序广播的发送如果指定了权限,接收器也必须定义好权限才能接受到,否则无法接收