由于Android8.0以后 静态注册比较麻烦,这里都采用动态注册。
创建广播接收者
优先级较高的接收者
public class OrderReceiver extends BroadcastReceiver {
private static final String TAG = “OrderReceiver”;
@Override
public void onReceive(Context context, Intent intent) {
if (Constant.ORDER_ACTION.equals(intent.getAction())) {
// 停止往下面传
// abortBroadcast(); //如果不想往下面传递广播,该方法将停止
Bundle resultExtras = getResultExtras(true);
CharSequence charSequence = resultExtras.getCharSequence(Constant.KEY_CHANGE);
//获取广播发送的数据
resultExtras.putCharSequence(Constant.KEY_CHANGE,“23RMB”);
//更改数据
setResultExtras(resultExtras);
//发送数据,优先级低的广播的数据可能被篡改
Log.d(TAG, “OrderReceiver” + charSequence);
Toast.makeText(context, “OrderReceiver” + charSequence, Toast.LENGTH_SHORT).show();
}
}
}
优先级较低的接收者
public class LowReceiver extends BroadcastReceiver {
private static final String TAG = “LowReceiver”;
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Constant.ORDER_ACTION)){
Bundle resultExtras = getResultExtras(true);
CharSequence charSequence = resultExtras.getCharSequence(Constant.KEY_CHANGE);
Log.d(TAG, "LowReceiver" + charSequence);
Toast.makeText(context, "LowReceiver" + charSequence, Toast.LENGTH_SHORT).show();
}
}
}
动态注册广播
动态注册,顺便设置优先级
LowReceiver lowReceiver = new LowReceiver();
IntentFilter lowIntent = new IntentFilter(Constant.ORDER_ACTION);
lowIntent.setPriority(10);
this.registerReceiver(lowReceiver,lowIntent);
OrderReceiver orderReceiver = new OrderReceiver();
IntentFilter orderIntent = new IntentFilter(Constant.ORDER_ACTION);
orderIntent.setPriority(100);
this.registerReceiver(orderReceiver,orderIntent);
模拟发送一条广播
Intent intent = new Intent(Constant.ORDER_ACTION);
Bundle bundle = new Bundle();
bundle.putCharSequence(Constant.KEY_CHANGE,"123456RMB");
sendOrderedBroadcast(intent,null,null,null, Activity.RESULT_OK,null,bundle);
/**
* @param
*
sendOrderedBroadcast(
Intent intent, String receiverPermission, BroadcastReceiver resultReceiver,
Handler scheduler, int initialCode, String initialData,
Bundle initialExtras)
* Intent intent,
* String receiverPermission: 拥有该权限的接收者才能接受
* BroadcastReceiver resultReceiver:指定最后一个广播接收者
* Handler scheduler, 用于接收 广播接收者的反馈
* int initialCode, 初始符:Activity.RESULT_OK
* String initialData, 初始数据,可以getDataString获得
* Bundle initialExtras 报装过的bundle数据 可悲篡改
*/