已经直到了广播接收器如何接收广播,接下来就应该知道在应用程序中发送自定义的广播。广播有标准广播和有序广播。
发送标准广播
在发送广播之前,需要先定义一个广播接收器来准备接收此广播才行,如下:
接下来修改activity_main.xml中的代码:
然后修改MainActivity中的代码:
可以看到,在按钮的点击事件里面加入了发送自定义广播的逻辑,首先构建一个Intent对象,并把要发送的广播的值传入,然后调用Context的sendBroadcast()方法将广播发送出去,这样所有监听com.example.broadcasttest.MY_BROADCAST这条广播的广播接收器就会收到消息,此时发出去的是一条标准广播。由于广播是使用Intent进行传递的,因此可以在Intent中携带一些数据传递给广播接收器。
发送有序广播
广播是一种可以跨进程的通信方式,这一点可以从前面接收系统广播的时候可以看出来。因此应用程序内发出的广播,其它的应用程序也是可以收到的。新建另一个项目,并在项目里新建AnotherBroadcastReceiver继承自BroadcastReceiver:
然后在AndroidMainfest.xml对接收器进行注册,这样就可以接收到广播消息了。不过这仍然是标准广播。变为有序广播,MainActivity代码如下:
即将sendBroadcast()方法改为sendOrderBroadcast()方法,这个方法接收两个参数,第一个是Intent对象,第二个是与权限相关的字符串,这里传入null即可。然后设定广播接收器的接收顺序,修改AndroidMainfest.xml中的代码如下:
可以看到设置了广播接收器的优先级,优先级较高的接收器可以先收到广播。先收到广播消息的接收器可以选择是否截断广播,如下:
使用本地广播
前面所举的发送和接收广播都是属于系统全局的广播,即发出的广播可以被其他任何的应用程序接收到,并且还可以接收到来自其它应用的广播,这样很容易引起安全性问题。为了解决这个安全性问题,Android引入了一套本地广播机制,使用这个广播机制发出的广播只能够在应用程序内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。
本地广播的用法并不复杂,主要是使用了一个LocalBroadcastManager来对广播进行管理,并提供了发送广播和注册广播的方法。修改MainActivity,如下:
需要注意的是,本地广播是无法通过静态注册的方式来接收的。