一、广播(Broadcast)基础概念
1. 什么是系统广播
- Android 内置了大量系统级广播,用于通知系统状态变化
- 常见系统广播:
- 电量低 / 电量变化
- 开机完成(
BOOT_COMPLETED) - 网络状态变化(
CONNECTIVITY_CHANGE) - 飞行模式切换
- 时间/时区变化
2. 广播接收器的作用
- 应用通过注册广播接收器,监听感兴趣的广播
- 广播到达时,系统自动回调接收器的
onReceive()方法 - 在
onReceive()中编写业务逻辑
二、广播的两种注册方式
| 对比项 | 动态注册(代码注册) | 静态注册(Manifest 注册) |
|---|---|---|
| 注册位置 | Activity / Service 等组件中 | AndroidManifest.xml |
| 生命周期 | 与注册组件绑定 | 独立于组件,应用未启动也能接收 |
| 灵活性 | 高,可随时注册/注销 | 低,安装时确定 |
| 适用场景 | 需要感知组件生命周期的广播 | 全局广播、开机启动等 |
| 高版本限制 | 无特殊限制 | Android 8.0+ 对隐式广播有大量限制 |
重要:
CONNECTIVITY_CHANGE(网络变化)广播在 Android 7.0+ 不允许静态注册,必须使用动态注册。
三、创建广播接收器
基本步骤
- 新建一个类,继承
BroadcastReceiver - 重写
onReceive(Context context, Intent intent)方法 - 在
onReceive()中处理接收到的广播逻辑
代码
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 处理广播逻辑
}
}Code language: PHP (php)
四、动态注册完整流程
1. 定义成员变量
private NetworkChangeReceiver networkChangeReceiver;
private IntentFilter intentFilter;Code language: PHP (php)
2. 在 onCreate() 中注册
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
networkChangeReceiver = new NetworkChangeReceiver();
intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(networkChangeReceiver, intentFilter);
}Code language: JavaScript (javascript)
3. 在 onDestroy() 中注销(必须!)
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}Code language: CSS (css)
4. 定义接收器内部类
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "网络改变了", Toast.LENGTH_LONG).show();
}
}Code language: JavaScript (javascript)
Previous: 了解Android广播
Next: Android 网络掉线/上线广播监听