这篇博文介绍有序广播的使用
有序广播的发送
和普通广播完全相同,只需要更换发送的方式即可
ordered.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(); intent.putExtra("test","有序广播"); intent.setAction("NORMAL"); //设定广播的Action,用于过滤 sendOrderedBroadcast(intent,null); } });
有序广播的消息传递和截断
在有序广播的传播过程中,优先级高的Receiver可以传递消息给低优先级的Receiver,甚至截断广播,具体操作如下:
传递消息:
public class BC1 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String text=intent.getStringExtra("test"); Toast.makeText(context,"BC1"+text,Toast.LENGTH_SHORT).show(); Bundle bundle =new Bundle(); bundle.putString("test","修改"); setResultExtras(bundle); } }
public class BC2 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String text=intent.getStringExtra("test"); Bundle bundle=getResultExtras(true); String s=bundle.getString("test"); Toast.makeText(context,"BC2"+text+s,Toast.LENGTH_SHORT).show(); } }
在高优先级的Receiver中,通过Bundle数据包传输数据,并通过setResultExtras方法来发送数据。在低优先级的接受者中,则通过getResultExtras来获取Bundle数据包,进而获取数据。
截断消息:
public class BC1 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String text=intent.getStringExtra("test"); Toast.makeText(context,"BC1"+text,Toast.LENGTH_SHORT).show(); abortBroadcast(); } }
只需要在高优先级的接收者中调用abortBroadcast方法即可。