In addition to the managed APIs from section 3.1, Android also includes a significant runtime-only “soft” API, in the form of such things as intents, permissions, and similar aspects of Android applications that cannot be enforced at application compile time.
The Android APIs include a number of constants on the android.os.Build class that are intended to describe the current device.
Android intents allow application components to request functionality from other Android components. The Android upstream project includes a list of applications which implement several intent patterns to perform common actions.
Device implementations:
Please refer to Section 2 for mandatory application intents for each device type.
[C-0-1] As Android is an extensible platform, device implementations MUST allow each intent pattern referenced in section 3.2.3.1 , except for Settings, to be overridden by third-party applications. The upstream Android open source implementation allows this by default.
[C-0-2] Device implementers MUST NOT attach special privileges to system applications' use of these intent patterns, or prevent third-party applications from binding to and assuming control of these patterns. This prohibition specifically includes but is not limited to disabling the “Chooser” user interface that allows the user to select between multiple applications that all handle the same intent pattern.
[C-0-3] Device implementations MUST provide a user interface for users to modify the default activity for intents.
However, device implementations MAY provide default activities for specific URI patterns (e.g. http://play.google.com) when the default activity provides a more specific attribute for the data URI. For example, an intent filter pattern specifying the data URI “http://www.android.com” is more specific than the browser's core intent pattern for “http://”.
Android also includes a mechanism for third-party apps to declare an authoritative default app linking behavior for certain types of web URI intents. When such authoritative declarations are defined in an app's intent filter patterns, device implementations:
Third-party applications rely on the platform to broadcast certain intents to notify them of changes in the hardware or software environment.
Device implementations:
Android includes settings that provide users an easy way to select their default applications, for example for Home screen or SMS.
Where it makes sense, device implementations MUST provide a similar settings menu and be compatible with the intent filter pattern and API methods described in the SDK documentation as below.
If device implementations report android.software.home_screen
, they:
android.settings.HOME_SETTINGS
intent to show a default app settings menu for Home Screen.If device implementations report android.hardware.telephony
, they:
[C-2-1] MUST provide a settings menu that will call the android.provider.Telephony.ACTION_CHANGE_DEFAULT
intent to show a dialog to change the default SMS application.
[C-2-2] MUST honor the android.telecom.action.CHANGE_DEFAULT_DIALER
intent to show a dialog to allow the user to change the default Phone application.
[C-2-3] MUST honor the android.telecom.action.CHANGE_PHONE_ACCOUNTS intent to provide user affordance to configure the ConnectionServices
associated with the PhoneAccounts
, as well as a default PhoneAccount that the telecommunications service provider will use to place outgoing calls. The AOSP implementation meets this requirement by including a “Calling Accounts option” menu within the “Calls” settings menu.
[C-2-4] MUST allow android.telecom.CallRedirectionService
for an app that holds the android.app.role.CALL_REDIRECTION
role.
[C-2-5] MUST provide the user affordance to choose an app that holds the android.app.role.CALL_REDIRECTION
role.
[C-2-6] MUST honor the android.intent.action.SENDTO and android.intent.action.VIEW intents and provide an activity to send/display SMS messages.
[C-SR] Are Strongly Recommended to honor android.intent.action.ANSWER, android.intent.action.CALL, android.intent.action.CALL_BUTTON, android.intent.action.VIEW & android.intent.action.DIAL intents with a preloaded dialer application which can handle these intents and provide fulfillment as described in the SDK.
If device implementations report android.hardware.nfc.hce
, they:
If device implementations report android.hardware.nfc
, they:
If device implementations support the VoiceInteractionService
and have more than one application using this API installed at a time, they:
android.settings.ACTION_VOICE_INPUT_SETTINGS
intent to show a default app settings menu for voice input and assist.If device implementations report android.hardware.bluetooth
, they:
If device implementations support the DND feature, they:
ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS
, which for implementations with UI_MODE_TYPE_NORMAL it MUST be an activity where the user can grant or deny the app access to DND policy configurations.If device implementations allow users to use third-party input methods on the device, they:
android.settings.INPUT_METHOD_SETTINGS
intent.If device implementations support third-party accessibility services, they:
android.settings.ACCESSIBILITY_SETTINGS
intent to provide a user-accessible mechanism to enable and disable the third-party accessibility services alongside the preloaded accessibility services.If device implementations include support for Wi-Fi Easy Connect and expose the functionality to third-party apps, they:
If device implementations provide the data saver mode, they:
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
intent, allowing users to add applications to or remove applications from the allow list.If device implementations do not provide the data saver mode, they:
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
intent but MAY implement it as a no-op.If device implementations declare the support for camera via android.hardware.camera.any
they:
android.media.action.STILL_IMAGE_CAMERA
and android.media.action.STILL_IMAGE_CAMERA_SECURE
intent and launch the camera in still image mode as described in the SDK.android.media.action.VIDEO_CAMERA
intent to launch the camera in video mode as described in the SDK.MediaStore.ACTION_IMAGE_CAPTURE
, MediaStore.ACTION_IMAGE_CAPTURE_SECURE
, and MediaStore.ACTION_VIDEO_CAPTURE
as described in the SDK document.If device implementations report android.software.device_admin
, they:
[C-13-1] MUST honor the intent android.app.action.ADD_DEVICE_ADMIN
to invoke a UI to bring the user through adding the device administrator to the system (or allowing them to reject it).
[C-13-2] MUST honor the intents android.app.action.ADMIN_POLICY_COMPLIANCE, android.app.action.GET_PROVISIONING_MODE, android.app.action.PROVISIONING_SUCCESSFUL, android.app.action.PROVISION_MANAGED_DEVICE, android.app.action.PROVISION_MANAGED_PROFILE, android.app.action.SET_NEW_PARENT_PROFILE_PASSWORD, android.app.action.SET_NEW_PASSWORD & android.app.action.START_ENCRYPTION and have an activity to provide fulfillment for these intents as described in SDK here.
If device implementations declare the android.software.autofill
feature flag, they:
AutofillService
and AutofillManager
APIs and honor the android.settings.REQUEST_SET_AUTOFILL_SERVICE intent to show a default app settings menu to enable and disable autofill and change the default autofill service for the user.If device implementations include a pre-installed app or wish to allow third-party apps to access the usage statistics, they:
android.permission.PACKAGE_USAGE_STATS
permission.If device implementations intend to disallow any apps, including pre-installed apps, from accessing the usage statistics, they:
If device implementations report the feature android.hardware.audio.output
, they:
Android includes support for interactive screensavers, previously referred to as Dreams. Screen Savers allow users to interact with applications when a device connected to a power source is idle or docked in a desk dock. Device Implementations:
android.settings.DREAM_SETTINGS
intent.If device implementations allow launching normal Android Activities on more than one display, they:
android.software.activities_on_secondary_displays
feature flag.ActivityOptions.setLaunchDisplayId()
API.Display.FLAG_PRIVATE
flag is removed.Activity#setShowWhenLocked()
API.android.content.res.Configuration
which corresponds to that display in order to be displayed, operate correctly, and maintain compatibility if an activity is launched on secondary display.If device implementations allow launching normal Android Activities on secondary displays and a secondary display has the android.view.Display.FLAG_PRIVATE flag: