Implicit Broadcast Exceptions
As part of the Android 8.0 (API level 26) Background Execution Limits, apps that target the API level 26 or higher can no longer register broadcast receivers for implicit broadcasts in their manifest. However, several broadcasts are currently exempted from these limitations. Apps can continue to register listeners for the following broadcasts, no matter what API level the apps target.
-
Exempted because these broadcasts are only sent only once, at first boot, and many apps need to receive this broadcast to schedule jobs, alarms, and so forth.
-
These broadcasts are protected by privileged permissions, so most normal apps cannot receive them anyway.
-
Clock apps may need to receive these broadcasts to update alarms when the time, timezone, or alarms are changed.
-
Only sent when the locale changes, which is not often. Apps might need to update their data when the locale changes.
-
If an app needs to know about these USB-related events, there is not currently a good alternative to registering for the broadcast.
-
Since this broadcast is only sent when the user physically connects or disconnects a plug, it's not likely to affect user experience if apps respond to this broadcast.
-
Similar to
ACTION_HEADSET_PLUG
, user experience is not likely to suffer if apps receive broadcasts for these Bluetooth events. -
OEM telephony apps may need to receive these broadcasts.
-
Some apps need to know about changes to login accounts so they can set up scheduled operations for the new and changed accounts.
-
Only sent when the user explicitly clears their data from Settings, so broadcast receivers are unlikely to significantly affect user experience.
-
Some apps may need to update their stored data when another package is removed; for those apps, there is no good alternative to registering for this broadcast.
Note: Other package-related broadcasts (such as
ACTION_PACKAGE_REPLACED
) are not exempted from the new restrictions. These broadcasts are common enough that there is a potential performance impact to exempting them. -
Apps that take action in response to users placing calls need to receive this broadcast.
-
This broadcast is not sent very often; some apps need to receive it, so that they know that the device's security status has changed.
-
Sent by the calendar provider to post an event reminder to the calendar app. Since the calendar provider doesn't know what the calendar app is, this broadcast has to be implicit.
-
These broadcasts are sent as a result of the user's physical interactions with the device (installing or removing storage volumes) or as part of boot initialization (as available volumes get mounted), so they are not a common occurrence and are generally under the user’s control.
-
These broadcasts are relied on by SMS recipient apps.
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
ACTION_HEADSET_PLUG
ACTION_CONNECTION_STATE_CHANGED
,
ACTION_CONNECTION_STATE_CHANGED
,
ACTION_ACL_CONNECTED
,
ACTION_ACL_DISCONNECTED
ACTION_CARRIER_CONFIG_CHANGED
,
TelephonyIntents.ACTION_*_SUBSCRIPTION_CHANGED
,
"TelephonyIntents.SECRET_CODE_ACTION"
LOGIN_ACCOUNTS_CHANGED_ACTION
ACTION_PACKAGE_DATA_CLEARED
ACTION_PACKAGE_FULLY_REMOVED
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