1、分类
分为标准广播(Normal broadcasts)和有序广播(Ordered broadcasts)
标准广播(Normal broadcasts):效率比较高,无法拦截。所有的广播接收器同时接收到。发送时调用sendBroadcast()方法
有序广播(Ordered broadcasts):优先级高的先接收到广播,可以进行拦截,也可以顺序传递下去。发送时调用sendOrderedBroadcast()方法。
2、注册
2.1 静态注册
直接在AndroidManifest.xml进行注册
例如:
<receiver
android:name=".broadcastTest.BootReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
2.2 动态注册
代码中调用registerReceiver(receiver,intentFilter)进行注册
代码中调用unregisterReceiver(receiver)进行注销
receiver参数为自定义receiver的对象,intentFilter参数为IntentFilter类的对象
3、自定义广播
3.1 标准广播实现
继承BroadcastReceiver类,实现onReceive方法。然后进行注册
在onReceive方法中,不允许开启线程,不可以运行耗时操作,否则会进行报错。所以接收器更多的是扮演一种可以打开程序其他组件的角色。
3.2 有序广播实现
实现方式和标准广播一样。注册的时候,设置priority属性
可以在优先级高的receiver中,调用abortBroadcast();阻止广播继续往下传递。
3.3 本地广播实现
实现方式与标准广播一样。注册和注销的时候需要调用LocalBroadcastManager来对广播
注意:本地广播是不可以通过静态注册的方法来接受的
本地广播的优点:
a、可以明确知道发送的广播不会离开我们的程序,因此不担心数据泄密。
b、其他程序无法将广播发送到我们程序内部,因此不需要担心会有系统安全漏洞。
c、发送本地广播会比全局广播更加高效。
4、Android中所有的系统广播
参考地址:https://blog.csdn.net/fengyuzhengfan/article/details/38439221
系统所有的广播,在sdk/platforms下面,所有的android版本中有一个data文件夹,文件夹下面有一个broadcast_actions.txt的文件。
例如:sdk\platforms\android-28\data\broadcast_actions.txt
官网中比较详细的讲解:
https://developer.android.com/reference/android/content/Intent
5、一些比较好的blog
https://www.kancloud.cn/bodhixu/broadcast/276505