BroadcastReceiver:广播接收者

来源:互联网 发布:杨健伟 蓝凌软件 编辑:程序博客网 时间:2024/05/17 16:12

广播的特征:

-- 有1个广播的发送方,若干个接收方-- 通过“频道”匹配发送方与接收方在Android系统中,把具有广播的通信方式的特征的数据传输方式称之为“广播”。

BroadcastReceiver是Android系统的核心组件之一。

【广播的发送与接收】1. 自定义类,继承自BroadcastReceiver

2. 在AndroidManifest.xml中注册该自定义的广播接收者

3. 当需要发送广播时,调用sendBroadcast(Intent)方法实现发送,该方法是ContextWrapper定义的方法,所以在Activity或Service中都可以直接调用该方法,在发送广播之前,应该为Intent对象配置Action属性,用于确定广播的“频道”

4. 在AndroidManifest.xml中,找到广播接收者的注册节点,添加子级节点,配置节点属性,使之匹配广播的发送方的“频道”

【广播接收者的注册方式】

1. 静态注册:在AndroidManifest.xml中注册,这种方式注册的广播接收者是常驻型的,即只要APP安装到手机上,就会开始接收广播,直至APP被卸载,而无视该APP有没有在手机上运行。

2. 动态注册:在程序的运行过程中通过调用registerReceiver(BroadcastReceiver, IntentFilter)方法注册,这种方式注册的广播接收者仅当注册后才会开始接收广播,当需要停止接收时,应该调用unregisterReceiver(BroadcastReceiver)方法注销。

【广播的种类】

1. 普通广播 / 无序广播:表现为广播的接收者们将不区分先后顺序,几乎同时收到广播,并且广播接收者们在接收广播时互不相干

2. 有序广播:表现为广播的接收者们会根据一定的先后顺序,接收到广播,类似于生活中的“传话”的特性

3. 粘滞广播 / 粘性广播:(也区分为有序和无序,无视:在Android 5.0已经声明为过期,不推荐使用)

【有序广播的接收者们的优先级】

1. 根据注册广播时,IntentFilter的priority属性决定,该属性的值是int类型的数值,数值越大,则优先级越高,即更优先接收到广播,反之,数值越小,则优先级越低,即越靠后收到广播

2. 当多个广播接收者的priority属性值相同时,动态注册的广播接收者的优先级更高

3. 当根据以上2条规则无法确定优先级时,将根据注册的先后顺序进行区分,先注册的广播接收者的优先级将更高,后注册的则更低Ps:如果是在不同的应用程序中,都使用了相同的注册方式,且priority属性值相同,如果都是使用的动态注册,可以直接区分出执行注册的先后顺序,如果都是使用静态注册,则根据项目的package属性值,按照字典排序法进行区分。

【有序广播的拦截】

在有序广播的接收者中,可以调用abortBroadcast()方法,终止有序广播向后继续传递。

【有序广播的篡改】在有序广播的接收者中,可以通过调用setResult???()方法,向广播中添加数据,优先级更低的广播接收者可以通过调用对应getResult???()获取此前被添加进的数据。

0 0
原创粉丝点击