本文涉及到的三个主体:
- 广播意图
- 广播发送方
- 广播接收者
- 广播接收者的登记者
1. 广播意图(broadcast intent 可简称为广播)
首先有必要简单说明下intent是什么。intent其实可以理解为Android系统为了方便信息可以在应用内组件之间或者在不同应用之间,进行传送,而创造出来的一个信息载体,数据信息可以通过装载到intent上来传送到其他地方。
broadcast intent 就是一个被发送方创建并发出,可以被多个登记了广播接收者的登记者所接收。所以起到了传递信息和广播的作用。
比如有:系统类型广播、自定义类型广播。
**系统类型广播:**设备启动完成(BOOT_COMPLETED)、WiFi状态变更、软件安装卸载、电话接打、短信收发,等等。
**自定义类型广播:**由应用自行定义的广播,功能一样,只是发送方是应用自身,而非系统。
- 创建广播的代码:
Intent broadIntent = new Intent();
broadIntent.setAction("action_aaa");
context.sendBroadcast(broadIntent);
2. 广播发送方
就是创建broadcast intent的组件,一般是应用组件(Activity/Fragment/Service)或Android系统。
- 调用代码:
context.sendBroadcast();
context.sendOrderBroadcast();
3. 广播接收者(Broadcast Receiver)
broadcast receiver是Android系统的四大组件之一。接收来自系统或者应用发出的broadcast intent,并进行处理。分为动态broadcast receiver和静态的standalone receiver,后者需要在清单文件中登记。
- 代码定义:
class XXXReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
if(intent.getAction().equals(DvbContents.FilterAction.ACTION_SEARCH_FINISHED_NOTIFY){
// To handle bussiness
}
}
}
}
4. broadcast receiver的登记者
毫无疑问,登记者指的就是需要利用broadcast receiver来做一些事情的那个组件。如,Activity、Fragment、Service等,一般来说这类组件都是采取动态登记的方式。而静态注册的则针对的是standalone receiver,其登记者则是Android系统,此类receiver是在AndroidManifest.xml中进行登记声明的。
- 声明代码:
// standalone receiver在AndroidManifest.xml中静态注册
<receiver android:name=".aaa.bbb.CCCReceiver"
android:directBootAware="true">
<intent-filter>
<action android:name="com.gangan.action.TO_BE_RICH"/>
</intent-filter>
</receiver>
// broadcast receiver在应用组件如Activity中进行登记,最后结束时需要撤销登记。
// 在Activity onCreate()中
XXXBroadcastReceiver receiver = new XXXBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("action_aaa");
intentFilter.addAction("action_bbb");
context.registerReceiver(receiver, intentFilter);
// 在Activity onDestroy()中撤销登记
context.unregister(receiver);
《 广播的整个处理过程 》
结束,晚安!
下一篇文章见《说Android广播(二)》1
简述普通广播和有序广播 ↩︎