BroadCastReceiver的注册

Posted yanglang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BroadCastReceiver的注册相关的知识,希望对你有一定的参考价值。

作为四大组件之一的Receiver,相信大家都不陌生,但是关于它的注册依旧是一个值得关注的问题。

在安卓系统中差不多每时每刻都在传递着广播消息,如说 电量广播,锁屏广播,短信广播,sdcard卡状态广播,开机广播等,作为一个安卓应用开发者,有时需要接受这些广播信息来进行数据处理,比如说,做一个骚扰短信拦截器,就需要在接受短信广播,并进行内容的判断,如果判断为垃圾短信就将这条短信取消掉。想要接受这些广播消息就需要定义一个BroadcastReceiver对象,并注册好这个广播对象的监听的是哪种类型的广播,关键来了,该怎么注册?

 安卓系统提供了两种注册机制:

  1. 第一种就是静态注册,也就是说在Mainfest.xml文件(清单文件)中注册,如:

<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
这样直接在清单文件中注册,作用的效果: 一旦应用被前台显示过这个Receiver将被永久被注册(除了卸载以外),开机状态下一直会监听某种广播,这样的注册是不太被推荐的。假想有这样一种情况,需要开发一个通过短信聊天的应用,可想而知,我们需要将这个应用的广播接收优先级设置在系统收信箱之上,在系统收信箱接收到短信前,本应用先接收到这个短信,然后把这个短信给屏蔽掉,所以我们需要注册一个BroadcastReceiver对象,如采用这个静态方式注册的话,这个BroadcaseReceiver将持续生效,故在短信聊天应用退出后,这个接受者依旧活跃着,这就会导致系统收信箱接收不到短信,这个设计就存在着很大的缺陷。  


2.第二种就是动态注册,也就是通过代码进行注册,这样意味着可以通过代码进行取消注册,如:
  registerReceiver(new MyReceiver,intentfliter); ------注册
  unregisterReceiver(new MyReceiver,intentfliter);------取消注册

以上是关于BroadCastReceiver的注册的主要内容,如果未能解决你的问题,请参考以下文章

如何使用新的导航架构组件从扩展 BroadcastReceiver 的类导航到片段

如何在扩展BroadcastReceiver的类中注册广播接收器?

Android四大组件之BroadcastReceiver

Android源码分析 BroadcastReceiver 注册过程

Android源码分析 BroadcastReceiver 注册过程

android BroadcastReceiver的子类静态注册action失效