BroadcastReceiver的8大常用系统广播

159 阅读2分钟

在 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);

注意事项

  1. 动态注册的 Receiver 需在 onDestroy() 中及时注销,避免内存泄漏。
  2. Android 8.0+ 对隐式广播(Implicit Broadcast)限制严格,部分系统广播需改用动态注册。
  3. 后台执行限制:避免在 Receiver 中执行耗时操作,建议使用 JobSchedulerWorkManager