有序广播,是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收者能够收到这条广播消息,当着个广播接收者中的逻辑执行完毕后,广播才回机继续传递。所以此时额广播接收者是有先后顺序的,优先级高的广播接收者就可以先收到广播消息,并且前面的广播接收者还可截断正在传递的广播,这样后面的广播接收者就无法收到广播消息了。
//在activity中发送有序广播
Intent intent = new Intent("zhh.zuiniubi");
sendOrderedBroadcast(intent, null);
//在广播接收者中截断广播发送
abortBroadcast();
下面是我写的一个简单例子
核心代码如下
//在activity中发送有序广播
public class MainActivity extends Activity {
private Button btn_orderbroadcast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_orderbroadcast=(Button) findViewById(R.id.send_orderbroadcast);
btn_orderbroadcast.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//发送有序广播
Intent intent = new Intent("zhh.zuiniubi");
sendOrderedBroadcast(intent, null);
}
});
}
}
//优先级高的广播接收者
public class MyOrderBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "优先级100", 10).show();
abortBroadcast();//截断广播发送
//如果默认的话有序广播会不断从优先级高的想优先级地的传递
}
}
//优先级低的广播接收者
public class MyOrderBroadcastReceiver2 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "优先级1", 10).show();
}
}
主清单文件中注册
<receiver
android:name="com.zhh.android.MyOrderBroadcastReceiver"
>
<intent-filter android:priority="100">
<action android:name="zhh.zuiniubi"/>
</intent-filter>
</receiver>
<receiver
android:name="com.zhh.android.MyOrderBroadcastReceiver2"
>
<intent-filter android:priority="1">
<action android:name="zhh.zuiniubi"/>
</intent-filter>
</receiver>
如果没有明白下载我的例子
http://download.csdn.net/detail/zhaihaohao1/8273569