广播:Android系统设计的一套用于消息通知的机制,能被特定的广播接收者接收,广播机制是Android系统中最为灵活的机制之一,比如说,我们可以自定义一个广播接收者用于接收手机开机广播,这样当手机开机时我们就可以启动应用程序,实现开机自启动功能
Android系统中广播被分为两种:
正常广播(Normal Broadcast):能被所有注册了该广播的广播接收者接收到,且它们是同时接收到的,广播不存在中止问题。
有序广播(Ordered Broadcast):该广播会先被优先级高的广播接收者接收,高优先级的接收者处理完后会在将广播专递给低优先级的接收者处理,如果高优先级的接收者终止了广播,那么低优先级的广播将无法接收到该广播。
广播的发送:调用Context对象的如下方法:
context.sendBroadcast(intent):发送一个标准广播 ,所有的广播接收者都可以接收该广播。
context.sendBroadcast(intent, receiverPermission):发送一个标准广播 ,第二个参数与接收者的权限相关,我们一般直接设为null。
context.sendOrderedBroadcast(intent, receiverPermission):发送一个有序广播 ,第二个参数与接收者的权限相关,我们一般直接设为null。
我们可以看到,发送广播其实只是发送了一个Intent对象,我们可以利用该对象来携带数据(Intent对象的作用之一就是传递数据),而该Intent对象的action属性就是该广播的标示。
发送本地广播:一般来说,我们发送的广播可以被其它程序接收到,这样这样其它程序就有可能取得广播中的数据,会给我们的程序留下安全隐患,我们希望去发送一种只可以被应用程序接受到的广播(本地广播),这是我们要使用LocalBroadcastManager对象来发送广播
1.LocalBroadcastManager对象的获取:调用其静态方法:getInstance(context)来获取,该方法需接收一个上下文对象。
2.发送广播:调用LocalBroadcastManager的sendBroadcast(intent)方法。
3.本地广播接收者的注册:只能使用LocalBroadcastManager的registerReceiver(recerver, filter)方法,不能再清单文件中注册(有关广播接收者及其注册会在后面说)。
BroastcastReceiver:广播接收者,用于处理广播的类,我们的自定义广播接收者都必须继承自BroadcastReceiver类,并需要复写其onRecieve方法。
1.广播优先级:指定了广播接收者接收有序广播的次序,值从1到1000,值越大优先级越高,高优先级的广播接收者先接收广播,且可以终止有序广播的专递
2.onReceive方法:当该广播接收者接收到指定广播时调用,其参数为:
Context context : 发送广播的上下文对象
Intent intent :我们可以从该对象中取出广播所携带的数据,进行相关操作
3.广播接收者的注册:有两种方法:
第一种:在程序的清单文件的application标签下用receiver标签注册,其方法为:
<receiver
android:name="被注册的广播接收者的全类名"
android:exported="设置该广播接收者是否接收其它程序发送的广播(其它程序发送的广播有可能和你发送的广播有相同的标示),若值为false则不接收">
<intent-filter
android:priority="该广播的优先级,值在1到1000之间,值越大优先级越高">
<action android:name="该广播接收者所接收的广播的标示"/>
</intent-filter>
</receiver>
第二种:使用上下文中的如下方法:context.registerReceiver(receiver, filter),其参数为:
BroadcastReceiver receiver : 需要被注册的广播接收者
IntentFilter filter : 意图过滤器对象,指定了该广播接收者的优先级和其接收的广播的标志
注意:代码注册广播时应该在activity等上下文对象中进行,不要在BroadcastReceiver的onReceive方法中进行,这是广播已经放出去了,再注册也没什么卵用了,还有,本地广播只能使用代码来注册。
4.abortBroadcast():用于终止有序广播
广播机制在安卓程序中有很多应用,如一些音乐、视频程序,它们会注册广播接收器去接收系统的来电广播等,在接收到广播后根据来电状态去暂停、继续音乐和视频的播放等,同时它也是一种灵活的机制,有时我们不知道某一功能该怎么实现时,就可以考虑广播机制。