实战演练—数鸭子 如果想要拦截一个有序广播,则必须在优先级较高的广播接收者中拦截接收到的广 播,接下来通过在优先级较高的MyBroadcastReceiverTwo中添加一个 abortBroadcast()方法拦截广播,运行程序,点击界面中的喇叭图片,效果如下。代码
时间: 2024-12-11 12:22:46 浏览: 10
在实战演练“数鸭子”的Android项目中,通常会有这样的代码结构来演示如何拦截有序广播。假设有一个简单的广播发射者`CountDucks Broadcaster`,用于发送鸭子的数量更新信息,然后有几个广播接收者(`BroadcastReceiverOne`, `BroadcastReceiverTwo`),其中`BroadcastReceiverTwo`被设定为优先级更高。
```java
// 发射广播的代码(示例)
Intent intent = new Intent("com.example.COUNT_DUCKS");
intent.putExtra("duckCount", currentDuckCount);
sendOrderedBroadcast(intent, "highPriority");
// 广播接收者(MyBroadcastReceiverTwo)拦截代码
public class MyBroadcastReceiverTwo extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("com.example.COUNT_DUCKS")) {
// 检查优先级并决定是否拦截
if (isHighPriority(context)) {
Log.d(TAG, "拦截广播");
abortBroadcast(); // 拦截广播
} else {
Log.d(TAG, "正常接收");
// 进行接收并处理数据的操作...
}
}
}
}
// 判断优先级的方法(示例)
private boolean isHighPriority(Context context) {
return context.getPackageName().equals("com.example.BROADCAST_RECEIVER_TWO"); // 指定为高优先级接收者的包名
}
```
当你运行程序并点击喇叭图片,触发广播发送,如果`MyBroadcastReceiverTwo`判断自己是高优先级接收者,就会拦截广播并记录相应的日志信息。如果没有设置为高优先级,那么广播会被正常的下一个接收者接收到。
阅读全文