作为 Android 8.0(API 级别 26)后台执行限制的一部分,目标 API 级别为 26 或更高的应用无法在其清单中为隐式广播注册广播接收器,除非广播专门发送给它们。但是,一些广播不受这些限制。无论应用的目标 API 级别是什么,应用都可以继续为以下广播注册侦听器。
ACTION_LOCKED_BOOT_COMPLETED
、ACTION_BOOT_COMPLETED
- 由于这些广播仅在首次启动时发送一次,并且许多应用需要接收这些广播(例如,计划作业和警报),因此被豁免。
ACTION_USER_INITIALIZE
、android.intent.action.USER_ADDED
、android.intent.action.USER_REMOVED
- 特权权限保护这些广播,因此大多数普通应用无论如何都无法接收它们。
android.intent.action.TIME_SET
、ACTION_TIMEZONE_CHANGED
、ACTION_NEXT_ALARM_CLOCK_CHANGED
- 时钟应用可能需要接收这些广播,以便在时间、时区或警报更改时更新警报。
ACTION_LOCALE_CHANGED
- 仅在区域设置更改时发送,这种情况并不常见。应用可能需要在区域设置更改时更新其数据。
ACTION_USB_ACCESSORY_ATTACHED
、ACTION_USB_ACCESSORY_DETACHED
、ACTION_USB_DEVICE_ATTACHED
、ACTION_USB_DEVICE_DETACHED
- 当应用需要了解这些与 USB 相关的事件时,没有比注册广播更好的替代方案。
BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED
、BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED
、ACTION_ACL_CONNECTED
、ACTION_ACL_DISCONNECTED
- 如果应用接收这些蓝牙事件的广播,用户体验不太可能受到影响。
ACTION_CARRIER_CONFIG_CHANGED
、TelephonyIntents.ACTION_*_SUBSCRIPTION_CHANGED
、TelephonyIntents.SECRET_CODE_ACTION
、ACTION_PHONE_STATE_CHANGED
、ACTION_PHONE_ACCOUNT_REGISTERED
、ACTION_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
此广播发送频率不高。某些应用需要接收它,以便知道设备的安全状态发生了变化。
ACTION_EVENT_REMINDER
由日历提供程序发送,用于将事件提醒发布到日历应用。由于日历提供程序不知道日历应用是什么,因此此广播必须是隐式的。
ACTION_MEDIA_MOUNTED
、ACTION_MEDIA_CHECKING
、ACTION_MEDIA_UNMOUNTED
、ACTION_MEDIA_EJECT
、ACTION_MEDIA_UNMOUNTABLE
、ACTION_MEDIA_REMOVED
、ACTION_MEDIA_BAD_REMOVAL
这些广播是在用户与设备进行物理交互(例如安装或移除存储卷)或作为启动初始化的一部分(当可用卷被挂载时)时发送的。它们并不常见,通常在用户的控制之下。
SMS_RECEIVED_ACTION
、WAP_PUSH_RECEIVED_ACTION
短信接收应用依赖于这些广播。