android,自定义广播,最终广播接收者,防止拦截广播,有序广播,无序广播

时间:2021-10-13 15:26:00

自定义广播"com.itheima.xxxooo"  .  

编写的FinalRecevier对象,是最终广播接收者。 即使前边拦截了广播,还是会收到广播。

public void click(View view){
Intent intent = new Intent();
intent.setAction("com.itheima.xxxooo");
//把这个自定义的广播发送出去
//sendBroadcast(intent); //发送一条无序的广播事件
//如果广播事件是无序发送出去的 所有的广播接受者 都会接受到这个事件

//如果广播是有序的发送出去的, 广播接收者会按照优先级 接受到广播事件
// 有序广播 特点: 高优先级的广播接受者 可以终止掉 广播事件
//sendOrderedBroadcast(intent, null);
sendOrderedBroadcast(intent, null, new FinalRecevier(), null, 0, null, null);
}

广播接收者

public class FinalRecevier extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("我是final的receiver");
}
}

public class MyBroadcastReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
System.out.println("reveriver 1 接收到了广播");
Toast.makeText(context, "检查到了 自定义的广播事件", 1).show();
}
}


public class MyBroadcastReceiver2 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("reveriver 2 接收到了广播");
Toast.makeText(context, "2 检查到了 自定义的广播事件", 1).show();
abortBroadcast();
}
}

public class MyBroadcastReceiver3 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("reveriver 3 接收到了广播");
Toast.makeText(context, "3 检查到了 自定义的广播事件", 1).show();
}
}


添加广播接收者,并设置优先级。接受自定义广播

<receiver android:name=".MyBroadcastReceiver" >
<intent-filter android:priority="10">
<action android:name="com.itheima.xxxooo" >
</action>
</intent-filter>
</receiver>
<receiver android:name=".MyBroadcastReceiver2" >
<intent-filter android:priority="100">
<action android:name="com.itheima.xxxooo" >
</action>
</intent-filter>
</receiver>
<receiver android:name=".MyBroadcastReceiver3" >
<intent-filter android:priority="1000">
<action android:name="com.itheima.xxxooo" >
</action>
</intent-filter>
</receiver>