Broadcast分为两种广播
1、普通广播
是异步的,可以在同一时刻被所有接收者收到,消息传递效率比较高,但缺点是接收者不能将结果传递给下一个接收者,且无法终止Broadcast Intent的传播
2、有序广播
接收者将按预先声明的优先级依次接收Broadcast.如A高于B,了高于C,那么执行顺序为A到B到C.优先级声明在<intent-filter.../>元素的android:priority属性中,数字越大优先级越高.取值范围为-1000~1000,先可以在代码中调用IntentFilter对象的setPriority()进行设置.
发送有序广播的方法为sendOrderedBroadcast()优先接收到Broadcast的接收者可以通过setResultExtras(Bundle)方法将处理结果存入Broadcast中,然后传给下一个接收者,也可以通过abortBroadcast()终止广播传输。
下一个接收者通过Bundle bundle = new getResultExtras(true)可以获取上一个接收者存入的数据。
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText( context, "接收到的Intent的Action为:" + intent.getAction() + "\n消息内容是:" + intent.getStringExtra("msg"), 5000).show(); //创建一个Bundle对象,并存入数据 Bundle bundle = new Bundle(); bundle.putString("first", "第一个BroadcastReceiver存入的消息"); //将bundle放入结果中 setResultExtras(bundle); //取消Broadcast的继续发送 abortBroadcast(); } } public class MyReceiver2 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = getResultExtras(true); //解析前一个BroadcastReceiver所存入的key为first的消息 String first = bundle.getString("first"); Toast.makeText(context,"第一个Broadcast存入的消息为:" + first, 5000).show(); } } 配置两个receiver的优先级 <receiver android:name="MyReceiver" > <intent-filter android:priority="20"> <action android:name="WangLi.Test.OrderBroadcast" /> </intent-filter> </receiver> <receiver android:name="MyReceiver2" > <intent-filter android:priority="0"> <action android:name="WangLi.Test.OrderBroadcast" /> </intent-filter> </receiver>