BroadcastReceiver:广播接收者 广播的特征: -- 有1个广播的发送方,若干个接收方 -- 通过“频道”匹配发送方与接收方 在Android系统中,把具有广播的通信方式的特征的数据传输方式称之为“广播”。 BroadcastReceiver是Android系统的核心组件之一。 【广播的发送与接收】 1. 自定义类,继承自BroadcastReceiver 2. 在AndroidManifest.xml中注册该自定义的广播接收者 3. 当需要发送广播时,调用sendBroadcast(Intent)方法实现发送,该方法是ContextWrapper定义的方法,所以在Activity或Service中都可以直接调用该方法,在发送广播之前,应该为Intent对象配置Action属性,用于确定广播的“频道” 4. 在AndroidManifest.xml中,找到广播接收者的注册节点,添加子级<intent-filter>节点,配置<action />节点属性,使之匹配广播的发送方的“频道” 【广播接收者的注册方式】 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???()获取此前被添加进的数据。
BroadcastReceiver:广播接收者
最新推荐文章于 2024-06-18 16:48:36 发布