在 Android 开发中,BroadcastReceiver 用于监听系统和应用发出的广播事件。以下是 8 个常用的系统广播及其典型用途和注意事项:
1. 开机完成广播
Action: ACTION_BOOT_COMPLETED
用途:监听设备启动完成事件,常用于初始化后台服务或定时任务。
注意:
- 需声明权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> - Android 10+ 限制后台启动 Activity,需谨慎处理逻辑。
示例注册方式(静态注册):
<receiver android:name=".BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
2. 网络状态变化广播
Action: ACTION_CONNECTIVITY_CHANGE
用途:监听网络连接状态(如 Wi-Fi/移动数据切换)。
注意:
- Android 7.0+ 要求动态注册,无法静态接收此广播。
- 建议使用
ConnectivityManager主动查询网络状态。
动态注册示例:
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(networkReceiver, filter);
3. 电量变化广播
Action: ACTION_BATTERY_CHANGED
用途:监听电量变化(如低电量警告、充电状态)。
注意:
- 只能通过动态注册接收(系统不允静态注册)。
- 通过
Intent携带电量百分比、充电状态等信息。
示例代码:
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryReceiver, filter);
4. 屏幕状态广播
Actions:
ACTION_SCREEN_ON(屏幕点亮)ACTION_SCREEN_OFF(屏幕关闭)
用途:优化资源使用(如屏幕关闭时暂停动画)。
注意:必须动态注册,静态注册无效。
5. 时区变化广播
Action: ACTION_TIMEZONE_CHANGED
用途:处理国际化时间相关的逻辑(如日历应用)。
注意:可能需要重新初始化时间相关模块。
6. 短信接收广播
Action: ACTION_SMS_RECEIVED
用途:拦截或处理短信(如验证码自动填充)。
注意:
- 需权限
<uses-permission android:name="android.permission.RECEIVE_SMS" /> - Android 8.0+ 限制隐式广播,建议动态注册。
7. 应用安装/卸载广播
Actions:
ACTION_PACKAGE_ADDED(应用安装)ACTION_PACKAGE_REMOVED(应用卸载)
用途:监控应用安装状态(如安全类应用)。
注意:需添加<data android:scheme="package" />到 IntentFilter。
静态注册示例:
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
8. 耳机插拔广播
Action: ACTION_HEADSET_PLUG
用途:处理耳机插拔事件(如音乐播放器暂停/恢复)。
注意:只能动态注册。
示例代码:
IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
registerReceiver(headsetReceiver, filter);
注意事项
- 动态注册的 Receiver 需在
onDestroy()中及时注销,避免内存泄漏。 - Android 8.0+ 对隐式广播(Implicit Broadcast)限制严格,部分系统广播需改用动态注册。
- 后台执行限制:避免在 Receiver 中执行耗时操作,建议使用
JobScheduler或WorkManager。