一、什么是BroadcastReceiver
广播接收器,顾名思义,是用来接收广播的一个安卓组件,可用来在不同应用和组件之间传递消息。
二、广播接收器的注册
广播接收器必须通过注册才能使用,注册方法分为两种:
- 静态注册
在Manifests中进行
<receiver android:name=".MyBroadcastReceiver01">
<intent-filter>
<action android:name="BC_ONE"/>
</intent-filter>
</receiver>
- 动态注册
在java代码中进行
IntentFilter intentFilter = new IntentFilter("BC_ONE");
MyBroadcastReceiver02 myBroadcastReceiver02 = new MyBroadcastReceiver02();
registerReceiver(myBroadcastReceiver02,intentFilter);
unregisterReceiver(myBroadcastReceiver02);//解除注册
ps:动态注册需要解除注册
不同的广播接收器通过action中的不同关键字来区分接受不同的广播。
三、广播的分类
广播接收器要接受广播,需要有广播发送方法,广播发送方法在content类中,可以通过intent来传递信息。
广播放松方式分为三类:
- 普通广播
- 有序广播
-
异步广播(已被弃用)
- 普通广播:又称为无序广播,对相同优先级的接收器是随机顺序先后到达的,因此无法截断广播和在不同接收器间传递消息。
Intent intent1 = new Intent();
intent1.putExtra("msg","这是一条普通广播");
intent1.setAction("BC_ONE");
sendBroadcast(intent1);
- 有序广播:广播接收器可按先后顺序接受此类广播,接受顺序为:动态注册高优先级接收器>动态注册低优先级接收器>静态注册优先级接收器>静态注册低优先级接收器,因此可以用abortBroadcast()方法截断广播,或者通过intent或者budle类来在不同接收器之间传递消息。
Intent intent2 = new Intent();
intent2.putExtra("msg","这是一条有序广播");
intent2.setAction("BC_ONE");
sendOrderedBroadcast(intent2,null);//第二个参数是接受权限