赞
踩
所谓有序广播,即存在一个发送方和众多接收方,接收方按照前后顺序排列,从第一个接收方接收并处理后依次向后传递;
类似于路由守卫,这意味着中间的任意一个接收方都可以截断广播从而阻止后续的接收方接收信息!
鉴于之前我们已经学习过简单的broadcast配置,这里就不做过多赘述,请按照如下代码搭建好默认的测试环境;
发送方页面配置
和上一章不同的是,这里使用sendOrderedBroadcast来注册有序广播,他接受的第二个参数我们一般填写null,第一个参数仍然是一个intent;
代码清单 BroadcastOrderActivity.java
public class BroadcastOrderActivity extends AppCompatActivity { public static final String ORDER_ACTION = "com.zhiyiyi.broadcast.order"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_broadcast_order); findViewById(R.id.btn_order).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.zhiyiyi.broadcast.order"); sendOrderedBroadcast(intent,null); } }); } @Override protected void onStart() { super.onStart(); } @Override protected void onStop() { super.onStop(); } }
配置两个一样的接收者模块
下面下的是接收者First的代码,接收者Second的代码和这个完全一样,你直接copy就好;
代码清单 receiver/OrderFirstReceiver.java
public class OrderFirstReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 因为发送页面已经定义好action常量,我们这里直接调用即可!
if (intent != null && intent.getAction().equals(BroadcastOrderActivity.ORDER_ACTION)) {
Log.d("receiver", "onReceive: first");
}
}
}
因为这里的广播是有序接受的,会有以下两个接收的规则:
@Override protected void onStart() { super.onStart(); firstReceiver = new OrderFirstReceiver(); IntentFilter firstFilter = new IntentFilter(ORDER_ACTION); firstFilter.setPriority(1); // 优先级1,小于2,后接收 registerReceiver(firstReceiver,firstFilter); secondReceiver = new OrderSecondReceiver(); IntentFilter secondFilter = new IntentFilter(ORDER_ACTION); secondFilter.setPriority(2); // 优先级2大于1,先接收 registerReceiver(secondReceiver,secondFilter); } // 别忘了销毁两个接收者! @Override protected void onStop() { super.onStop(); unregisterReceiver(firstReceiver); unregisterReceiver(secondReceiver); }
在任意一个接收者的onReceive方法里填写abortBroadcast即可截停
@Override
public void onReceive(Context context, Intent intent) {
// 因为发送页面已经定义好action常量,我们这里直接调用即可!
if (intent != null && intent.getAction().equals(BroadcastOrderActivity.ORDER_ACTION)) {
abortBroadcast(); // 在此处截停广播
}
}
END 下一章将会带大家更进一步的了解Android广播的其他的使用方法!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。