android自定义广播,自定义广播

本文介绍了Android中如何发送和接收自定义广播,包括标准广播和有序广播的区别。通过示例展示了如何在两个不同的应用中注册接收器,并设置优先级,确保广播的顺序执行。还讨论了如何使用abortBroadcast()方法截断广播,使得后续接收器无法接收到广播。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安卓允许用户发送自定义广播(broadcast),满足接收条件的接收器(receiver)就可以接受自定义广播。

发送自定义广播

自定义广播分为标准(无序)自定义广播以及有序自定义广播:

sendBroadcast(Intent intent); //发送标准自定义广播

sendOrderedBroadcast(Intent, null); //发送有序自定义广播

标准自定义广播是任何满足条件的接收器都可以接受。

有序自定义广播的第二个参数是接受权限,一般为null。有序广播接收器可以设置接收优先级priority,优先级高的先收到广播,并且可以设置截断广播,这样之后的接收器就无法接受广播。

接受自定义广播

接受自定义广播一般使用静态接受,即在AndroidManifest.xml中注册接收器,这样应用即使未运行,也可以响应广播:

......

......

......

示例

我们新建2个工程:BroadcastTest1和BroadcastTest2。BoardcastTest1的主活动中添加一个按钮发送自定义的广播"Example.MY_Broadcast",然后两个工程中都添加接收器用来接收这个广播,接收后弹出toast通知。项目1的toast要比项目2的先提示。

先来写项目1发送广播,发送广播要利用Intent类的实例,如下:

//BroadcastTest1.MainActivity: 项目1的主活动发送广播

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

... ...

Button button =(Button)findViewById(R.id.button_broadcast);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent("Example.MY_BROADCAST");

sendOrderedBroadcast(intent, null);

}

});

... ...

}

}

第一个项目的接收器类,继承BroadcastReceiver并重写其中的onReceive()方法,这个方法就是接收器接收到广播后要执行的,注意的是不要写太多内容,如果onReceive()方法执行时间过长会报错:

//BroadcastTest1.MyBroadcastReceiver:项目1的接收器类

public class MyBoardcastReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

Toast.makeText(context, "BroadcastTest1:Example.MY_BROADCAST", Toast.LENGTH_LONG).show;

}

}

之后要在项目1的主配置文件中注册接收器,并设置优先级为100:

......

......

接下来写项目2的接收器,基本上与项目1相同,不过我们不设置优先级,这样一定会先提示项目1的toast。如下:

//BroadcastTest2.MyBroadcastReceiver:项目2的接收器类

public class MyBoardcastReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

Toast.makeText(context, "BroadcastTest2:Example.MY_BROADCAST", Toast.LENGTH_LONG).show;

}

}

......

......

编译下两个工程测试吧,项目中其他的部分请自行完善。另外,一些非原生安卓ROM实现静态接受广播需要给应用“自动运行”权限。

关于截断广播

截断广播在接收器类中使用abortBroadcast()方法,我们修改项目1的接收器类,加上这个方法:

//BroadcastTest1.MyBroadcastReceiver:项目1的接收器类

public class MyBoardcastReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

Toast.makeText(context, "BroadcastTest1:Example.MY_BROADCAST", Toast.LENGTH_LONG).show;

abortBroadcast();

}

}

再次编译项目1测试,这次只有项目1的toast通知,没有项目2的toast通知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值