这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战」
一、Broadcast基础
Broadcast是Android四大组件之一,主要是在组件间通信或者进程间通信,接收系统发送的广播
广播分为标准广播和有序广播两种类型
- 标准广播(Normal broadcast):是异步执行的广播,没有任何先后顺序,所有的广播接收器几乎都会在同一时刻接收到这条广播消息
- 有序广播(Ordered broadcast):是同步执行的广播,是由顺序的,需要上一个广播接收器中的逻辑执行完毕后,才能继续传递,广播可以被截断
二、Broadcast使用
1. 广播注册
广播注册的方式一般有两种,静态注册和动态注册
- 静态注册
在AndroidManifest.xml中注册称为静态注册,静态广播不需要程序启动就能收到广播
首先新建一个类,继承BroadcastReceiver
public class DemoBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"DemoBroadcastReceiver",Toast.LENGTH_LONG).show();
}
}
在AndroidManifest.xml声明DemoBroadcastReceiver这个类
<receiver android:name=".DemoBroadcastReceiver">
<intent-filter>
<action android:name="...接收的广播的Action"/>
</intent-filter>
</receiver>
- 动态注册
在代码中注册称为动态注册
动态注册需要在代码中动态的指定广播地址并注册,广播会跟随程序的生命周期,所有在销毁的时候需要解除绑定
DemoBroadcastReceiver receiver = new DemoBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("接收的广播的Action");
registerReceiver(receiver, filter);
- 发送广播 当注册完成之后,这个接收者就可以正常工作了。我们可以向它发送一条广播
public void send(View view) {
Intent intent = new Intent("广播的Action");
intent.putExtra("msg", "BroadcastReceiver Demo.");
sendBroadcast(intent);
}
三、几种常用到的BroadcastReceiver
- 开机广播
<action android:name="android.intent.action.BOOT_COMPLETED"/>
开机广播需要添加权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
- 网络状态改变
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
对应的权限为:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
- 电量变化
<action android:name="android.intent.action.BATTERY_CHANGED"/>