Android四大组件之一。
实现一个广播的步骤
创建一个广播接收器类
继承自BroadcastReceiver,实现onReceive()方法,onReceive方法通过intent-filter
过滤要处理的广播
1 | public class MyReceiver extends BroadcastReceiver { |
广播接收器可以接收系统广播和app自定义的广播。
注册广播接收器
有2中注册方式
静态注册
在AndroidManifest中注册。这种广播在应用安装时即被系统解析,这种形式的广播不需要应用启动就可以收到相应的广播(较高的版本已不支持)。
动态注册
在代码中通过context.registerReceiver()注册,不需要的时候通过context.unRegisterReceiver()接触广播。这种广播需要应用启动并注册后才能接收广播。
发送广播
context提供了
- sendBroadcast()方法发送广播普通广播,光播发出去后,几乎所有接收者是同一时间收到广播。
- sendOrderedBroadcast()发送有序广播,广播发出去后,同一时刻只有一个广播接收器可以收到消息。当广播中的逻辑执行完毕后,广播才会继续传播。
广播的安全性问题
Android中的广播可以跨进程通信。因此可能存在一些问题:
- 其他APP可能会发出针对当前App的广播,导致当前APP不断的收到并处理广播。
- 其他APP可以注册广播接收器,获取当前APP的广播信息
因此需要采取一些措施避免以上的问题发生
- 将expored属性设置为false,使得当前APP发出的广播只能由当前APP接收。
- 发送广播和接收广播时,设置permission,用于权限校验
- 发送广播时,指定广播接收器所在的包名 (intent.setPackage(packageName))
- 采用LocalBroadcastReceiver
LocalBroadcastManager
特点
- 通过单例模式创建对象
- 使用LocalBroadcastManager对象的sendBroadcast方法发送的广播,只能在应用内部传递。
- 使用LocalBroadcastManager对象注册的广播,只接受应用内部的广播。