Android 有序广播(新手详解)


由于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数据 可悲篡改
*/


版权声明:本文为weixin_44241851原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。