1.BroadCastReceiver概述
- 说起这个组件,就不得不提到广播了。广播是应用程序之间传输信息的机制。是为了方便数据的通信,例如监听一些广播,如来电、来短信等。
- 广播的流程:发送—>接收。* 一个发送,多个接收。*
如图
2 流程
2.1 发送
普通广播、有序广播
广播分类 | 发送方法 |
---|---|
普通广播 | Context.sendBroadcast() |
有序广播 | Context.sendOrderedBroadcast() |
- 普通广播有以下特性:
- 它是完全异步的。
- 所有的receivers接收器的执行顺序不确定。因此,所有的receivers接收器接收broadcast的顺序不确定。
- 这种方式效率更高!
代码如下:
Intent intent = new Intent(“com.app.bc.test”);
sendBroadcast(intent);//发送广播事件
- 有序广播有以下特性:
- BroadcastReceiver可以使用setResult系列函数来结果传给下一个 BroadcastReceiver,通过getResult系列函数来取得上个BroadcastReceiver返回的结果,并可以abort系列函数来让系统丢弃该广播让,使用该广播不再传送到别的BroadcastReceiver。
- BroadcastReceiver拥有优先级属性,即android:priority=”100”,取值范围为1000~-1000,数值越大,优先级别就越高。
Intent intent = new Intent(“com.app.bc.test”);
sendOrderedBroadcast(intent,null);//发送广播事件
2.2 接收
- 接收:BroadcastReceiver,会调用它的onReceive()方法,并将包含消息的Intent对象传给它。onReceive()方法生命周期只有10秒,即不要在这里执行太长的任务。(这里确确实实是10秒,我专门翻墙看了官方文档0.0)
class MyBroadcastReceiver extends BroadcastReceiver {
//接收到广播会被自动调用
@Override
public void onReceive (Context context, Intent intent) {
//从Intent中获取action
…your code here…
}
}
3 注册与过滤器
- 注册:正如Activity使用一样,broadcast同样需要注册。
- 过滤器:不可能所有的广播都要接收,所以便有了过滤器,区别所有的广播的就是aciton了,有官方和自定义的。
静态注册、动态注册
- 静态注册:在AndroidManifest.xml注册。因为它是四大组件之一,所以它的位置和Activity同级。
<application>
<activity name=""/>
<receiver android:name=".MyBroadcastReceiver">
<!-- intent过滤器,指定可以匹配哪些intent, 一般需要定义action 可以是自定义的也可是系统的 -->
<intent-filter>
<action android:name="com.app.bc.test"/> <!--action作为过滤的唯一判定标准-->
</intent-filter>
</receiver>
</application>
- 动态注册:
SMSReceiver smsReceiver = new SMSReceiver();
IntentFilter filter = new IntentFilter(); //新建一个intent过滤器
filter.addAction(“android.provider.Telephony.SMS_RECEIVED”); //加入action
TestBC1Activity.this.registerReceiver(smsReceiver, filter); //注册
- 区别
- 静态注册:在AndroidManifest.xml注册,android不能自动销毁广播接收器,也就是说当应用程序关闭后,还是会接收广播。
- 动态注册:在代码中通过registerReceiver()手工注册。当程序关闭时,该接收器也会随之销毁。当然,也可手工调用unregisterReceiver()进行销毁。
4.总结
方法 | 含义 |
---|---|
sendBroadcast | 发送普通广播 |
sendOrderedBroadcast | 发送有序广播 |
onReceive | 接收广播后调用 |
intent-filter | 静态注册的过滤器 |
priority | 有序广播优先级 |
filter.addAction | 动态注册过滤器添加 action |
registerReceiver | 动态注册 |
unregisterReceiver() | 手动销毁 |