安卓入门五 BroadcastReceiver
-
BroadcastReceiver
android通过广播来实现不同进程间的通信,对应于广播(broadcast)还有一个广播接收器(broadcast receiver)。每个广播指定了对应的action、type等信息,每个接收器根据这些信息来过滤是否自己要接收的广播。
广播接收器主要分为两种类型:标准广播 和 有序广播
2.1 Normal Broadcast
标准广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播的信息,因此他们之间没有任何的先后顺序可言。
标准广播又区分为两种:动态注册 和 静态注册
动态
1.发送广播之前,需要先定义一个广播接收器来准备接收此广播。
2.在我们想接收的地方进行注册一个广播来进行接收。
以上的IntentFilter为广播过滤器,意味着我们只能够接收到 带有
“com.example.jie.Broad”(自定义)发出的广播。
3.上面我们已经有了广播接收器,并且在我们想要的地方进行注册了,就可以发送广播了。
4.记得注销。
静态注册
设置为静态注册的时候,我们的广播接收器就一个设置为 独立外部类 或者是 静态内部类
唯一不同就是静态注册我们就不需要在代码中进行注册,只需要在菜单中进行一次注册。
enabled 设置为 true 意味着能够接受到信息 ,exported 为 true 意味着能够接收到外部apk广播发送的信息。发送还是跟动态发送一样。
2.2 带权限标准广播
(我们把下面 发送信息的apk称为甲,接收的信息的apk称为乙)
1.如果别的应用程序监听我们的广播,那么会造成我们应用程序的数据泄露;
甲
乙:我们在乙中添加如下权限我们就可以获取得到已经得到甲加了权限的
2.如果别的应用程序冒充我们的应用发送广播,如何不随意接收别的程序发过来的程序
乙
静态注册
动态注册
2.3 Ordered Broadcast
广播接收器是有先后顺序的,而且前面的广播可以对后续的广播进行截断,以阻止让其继续广播。
权限的高低设置方法如下。
调用IntentFilter的setPriority(int priority)方法设置优先级,参数值可以是-1000~1000,值越大,优先级越高。同样的在静态注册中,通过设置intent-filter标签的priority属性来设置优先级
截断方法
为了解决安卓的广播安全问题安卓还引入了另一个 LocalBroadcastManger 类。
2.4 Local Broadcast
本地广播
甲
乙
2.5 System Broadcast
系统广播
通过注册来接收到广播的发出来的一些系统通知,如飞行模式被打开,音量键被按等。
动态注册
静态注册
如下是系统的一些常见的行为。
2.6 AMS(Activity Manager Service)
Android广播机制主要工作是为了实现一处发生事情,多处得到通知的效果。这种通知工作常常要牵涉跨进程通讯,所以需要由AMS(Activity Manager Service)集中管理。
品茗论道说广播(Broadcast内部机制讲解) - 悠然红茶的个人页面 - OSCHINA - 中文开源技术交流社区
android Application Component研究之BroadcastReceiver-CSDN博客