隐式广播例外情况

根据 Android 8.0(API 级别 26)后台执行限制的规定,以 API 级别 26 或更高级别为目标的应用无法在其清单中注册隐式广播的广播接收器,除非广播是专门发送给这些应用的。不过,有几种广播不受这些限制的约束。无论应用的目标 API 级别为何,应用都可以继续为以下广播注册监听器。

ACTION_LOCKED_BOOT_COMPLETEDACTION_BOOT_COMPLETED
豁免,因为这些广播仅在首次启动时发送一次,并且许多应用需要接收这些广播,例如调度作业和闹钟。
ACTION_USER_INITIALIZEandroid.intent.action.USER_ADDEDandroid.intent.action.USER_REMOVED
特许权限可保护这些广播,因此大多数普通应用无论如何都无法接收它们。
android.intent.action.TIME_SETACTION_TIMEZONE_CHANGEDACTION_NEXT_ALARM_CLOCK_CHANGED
时钟应用可能需要接收这些广播,以便在时间、时区或闹钟发生更改时更新闹钟。
ACTION_LOCALE_CHANGED
仅在语言区域发生更改时发送,这种情况并不常见。当语言区域发生更改时,应用可能需要更新其数据。
ACTION_USB_ACCESSORY_ATTACHEDACTION_USB_ACCESSORY_DETACHEDACTION_USB_DEVICE_ATTACHEDACTION_USB_DEVICE_DETACHED
当应用需要了解这些与 USB 相关的事件时,除了注册广播之外,没有其他有效的替代方案。
BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGEDBluetoothA2dp.ACTION_CONNECTION_STATE_CHANGEDACTION_ACL_CONNECTEDACTION_ACL_DISCONNECTED
如果应用接收这些蓝牙事件的广播,用户体验不太可能受到影响。
ACTION_CARRIER_CONFIG_CHANGEDTelephonyIntents.ACTION_*_SUBSCRIPTION_CHANGEDTelephonyIntents.SECRET_CODE_ACTIONACTION_PHONE_STATE_CHANGEDACTION_PHONE_ACCOUNT_REGISTEREDACTION_PHONE_ACCOUNT_UNREGISTERED
OEM 电话应用可能需要接收这些广播。
LOGIN_ACCOUNTS_CHANGED_ACTION
某些应用需要了解登录帐号的变化,以便为新帐号和已更改的帐号设置计划操作。
ACTION_ACCOUNT_REMOVED
具有帐号可见权限的应用会在帐号被移除后收到此广播。如果这是应用需要处理的唯一帐号更改,我们建议应用使用此广播,而不是已废弃的 LOGIN_ACCOUNTS_CHANGED_ACTION
ACTION_PACKAGE_DATA_CLEARED
仅在用户从“设置”中明确清除其数据时发送,因此广播接收器不太可能严重影响用户体验。
ACTION_PACKAGE_FULLY_REMOVED

移除其他软件包时,某些应用需要更新其存储的数据。对于这些应用,没有什么不错的替代方法可以替代注册此广播。

注意:其他与软件包相关的广播(例如 ACTION_PACKAGE_REPLACED不能免除后台执行限制。这些广播非常常见,豁免它们可能会影响性能。

ACTION_NEW_OUTGOING_CALL

应用需要接收此广播,以响应用户拨打电话。

ACTION_DEVICE_OWNER_CHANGED

此广播的发送频率不高。有些应用需要接收设备 ID,才能知道设备的安全状态发生了变化。

ACTION_EVENT_REMINDER

日历提供程序发送,用于向日历应用发布活动提醒。由于日历提供程序不知道日历应用是什么,因此此广播必须是隐式广播。

ACTION_MEDIA_MOUNTEDACTION_MEDIA_CHECKINGACTION_MEDIA_UNMOUNTEDACTION_MEDIA_EJECTACTION_MEDIA_UNMOUNTABLEACTION_MEDIA_REMOVEDACTION_MEDIA_BAD_REMOVAL

这些广播会在用户与设备的物理交互(例如安装或移除存储卷)时发送,或在装载可用卷时作为启动初始化的一部分发送。这种情况并不常见,通常由用户控制。

SMS_RECEIVED_ACTIONWAP_PUSH_RECEIVED_ACTION

短信接收应用依赖于这些广播。