1 2## 3.2\. Soft API Compatibility 3 4In addition to the managed APIs from [section 3.1](#3_1_managed_api_compatibility), 5Android also includes a significant runtime-only “soft” API, in the form of such 6things as intents, permissions, and similar aspects of Android applications that 7cannot be enforced at application compile time. 8 9### 3.2.1\. Permissions 10 11* [C-0-1] Device implementers MUST support and enforce all permission 12constants as documented by the [Permission reference page](http://developer.android.com/reference/android/Manifest.permission.html). 13Note that [section 9](#9_security_model_compatibility) lists additional 14requirements related to the Android security model. 15 16### 3.2.2\. Build Parameters 17 18The Android APIs include a number of constants on the 19[android.os.Build class](http://developer.android.com/reference/android/os/Build.html) 20that are intended to describe the current device. 21 22* [C-0-1] To provide consistent, meaningful values across device 23implementations, the table below includes additional restrictions on the formats 24of these values to which device implementations MUST conform. 25 26<table> 27 <tr> 28 <th>Parameter</th> 29 <th>Details</th> 30 </tr> 31 <tr> 32 <td>VERSION.RELEASE</td> 33 <td>The version of the currently-executing Android system, in human-readable 34 format. This field MUST have one of the string values defined in 35 <a href="http://source.android.com/compatibility/ANDROID_VERSION/versions.html">ANDROID_VERSION</a>.</td> 36 </tr> 37 <tr> 38 <td>VERSION.SDK</td> 39 <td>The version of the currently-executing Android system, in a format 40 accessible to third-party application code. For Android ANDROID_VERSION, 41 this field MUST have the integer value ANDROID_VERSION_INT.</td> 42 </tr> 43 <tr> 44 <td>VERSION.SDK_INT</td> 45 <td>The version of the currently-executing Android system, in a format 46 accessible to third-party application code. For Android ANDROID_VERSION, 47 this field MUST have the integer value ANDROID_VERSION_INT.</td> 48 </tr> 49 <tr> 50 <td>VERSION.INCREMENTAL</td> 51 <td>A value chosen by the device implementer designating the specific build 52 of the currently-executing Android system, in human-readable format. This 53 value MUST NOT be reused for different builds made available to end users. A 54 typical use of this field is to indicate which build number or 55 source-control change identifier was used to generate the build. The value 56 of this field MUST be encodable as printable 7-bit ASCII and match the 57 regular expression “^[^ :\/~]+$”.</td> 58 </tr> 59 <tr> 60 <td>BOARD</td> 61 <td>A value chosen by the device implementer identifying the specific 62 internal hardware used by the device, in human-readable format. A possible 63 use of this field is to indicate the specific revision of the board powering 64 the device. The value of this field MUST be encodable as 7-bit ASCII and 65 match the regular expression “^[a-zA-Z0-9_-]+$”.</td> 66 </tr> 67 <tr> 68 <td>BRAND</td> 69 <td>A value reflecting the brand name associated with the device as known to 70 the end users. MUST be in human-readable format and SHOULD represent the 71 manufacturer of the device or the company brand under which the device is 72 marketed. The value of this field MUST be encodable as 7-bit ASCII and match 73 the regular expression “^[a-zA-Z0-9_-]+$”.</td> 74 </tr> 75 <tr> 76 <td>SUPPORTED_ABIS</td> 77 <td>The name of the instruction set (CPU type + ABI convention) of native 78 code. See <a href="#3_3_native_api_compatibility">section 3.3. Native API 79 Compatibility</a>.</td> 80 </tr> 81 <tr> 82 <td>SUPPORTED_32_BIT_ABIS</td> 83 <td>The name of the instruction set (CPU type + ABI convention) of native 84 code. See <a href="#3_3_native_api_compatibility">section 3.3. Native API 85 Compatibility</a>.</td> 86 </tr> 87 <tr> 88 <td>SUPPORTED_64_BIT_ABIS</td> 89 <td>The name of the second instruction set (CPU type + ABI convention) of 90 native code. See <a href="#3_3_native_api_compatibility">section 3.3. Native 91 API Compatibility</a>.</td> 92 </tr> 93 <tr> 94 <td>CPU_ABI</td> 95 <td>The name of the instruction set (CPU type + ABI convention) of native 96 code. See <a href="#3_3_native_api_compatibility">section 3.3. Native API 97 Compatibility</a>.</td> 98 </tr> 99 <tr> 100 <td>CPU_ABI2</td> 101 <td>The name of the second instruction set (CPU type + ABI convention) of 102 native code. See <a href="#3_3_native_api_compatibility">section 3.3. Native 103 API Compatibility</a>.</td> 104 </tr> 105 <tr> 106 <td>DEVICE</td> 107 <td>A value chosen by the device implementer containing the development name 108 or code name identifying the configuration of the hardware features and 109 industrial design of the device. The value of this field MUST be encodable 110 as 7-bit ASCII and match the regular expression 111 “^[a-zA-Z0-9_-]+$”. This device name MUST NOT change during the 112 lifetime of the product.</td> 113 </tr> 114 <tr> 115 <td>FINGERPRINT</td> 116 <td>A string that uniquely identifies this build. It SHOULD be reasonably 117 human-readable. It MUST follow this template: 118 <p class="small">$(BRAND)/$(PRODUCT)/<br> 119 $(DEVICE):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)</p> 120 <p>For example:</p> 121<p class="small">acme/myproduct/<br> 122 mydevice:ANDROID_VERSION/LMYXX/3359:userdebug/test-keys</p> 123 <p>The fingerprint MUST NOT include whitespace characters. The value of 124 this field MUST be encodable as 7-bit ASCII.</p></td> 125 </tr> 126 <tr> 127 <td>HARDWARE</td> 128 <td>The name of the hardware (from the kernel command line or /proc). It 129 SHOULD be reasonably human-readable. The value of this field MUST be 130 encodable as 7-bit ASCII and match the regular expression 131 “^[a-zA-Z0-9_-]+$”.</td> 132 </tr> 133 <tr> 134 <td>HOST</td> 135 <td>A string that uniquely identifies the host the build was built on, in 136 human-readable format. There are no requirements on the specific format of 137 this field, except that it MUST NOT be null or the empty string ("").</td> 138 </tr> 139 <tr> 140 <td>ID</td> 141 <td>An identifier chosen by the device implementer to refer to a specific 142 release, in human-readable format. This field can be the same as 143 android.os.Build.VERSION.INCREMENTAL, but SHOULD be a value sufficiently 144 meaningful for end users to distinguish between software builds. The value 145 of this field MUST be encodable as 7-bit ASCII and match the regular 146 expression “^[a-zA-Z0-9._-]+$”.</td> 147 </tr> 148 <tr> 149 <td>MANUFACTURER</td> 150 <td>The trade name of the Original Equipment Manufacturer (OEM) of the 151 product. There are no requirements on the specific format of this field, 152 except that it MUST NOT be null or the empty string (""). This field 153 MUST NOT change during the lifetime of the product.</td> 154 </tr> 155 <tr> 156 <td>MODEL</td> 157 <td>A value chosen by the device implementer containing the name of the 158 device as known to the end user. This SHOULD be the same name under which 159 the device is marketed and sold to end users. There are no requirements on 160 the specific format of this field, except that it MUST NOT be null or the 161 empty string (""). This field MUST NOT change during the 162 lifetime of the product.</td> 163 </tr> 164 <tr> 165 <td>PRODUCT</td> 166 <td>A value chosen by the device implementer containing the development name 167 or code name of the specific product (SKU) that MUST be unique within the 168 same brand. MUST be human-readable, but is not necessarily intended for view 169 by end users. The value of this field MUST be encodable as 7-bit ASCII and 170 match the regular expression “^[a-zA-Z0-9_-]+$”. This product 171 name MUST NOT change during the lifetime of the product.</td> 172 </tr> 173 <tr> 174 <td>SERIAL</td> 175 <td>MUST return "UNKNOWN".</td> 176 </tr> 177 <tr> 178 <td>TAGS</td> 179 <td>A comma-separated list of tags chosen by the device implementer that 180 further distinguishes the build. The tags MUST be encodable as 7-bit ASCII 181 and match the regular expression “^[a-zA-Z0-9._-]+” and MUST 182 have one of the values corresponding to the three typical Android platform 183 signing configurations: release-keys, dev-keys, and test-keys.</td> 184 </tr> 185 <tr> 186 <td>TIME</td> 187 <td>A value representing the timestamp of when the build occurred.</td> 188 </tr> 189 <tr> 190 <td>TYPE</td> 191 <td>A value chosen by the device implementer specifying the runtime 192 configuration of the build. This field MUST have one of the values 193 corresponding to the three typical Android runtime configurations: user, 194 userdebug, or eng.</td> 195 </tr> 196 <tr> 197 <td>USER</td> 198 <td>A name or user ID of the user (or automated user) that generated the 199 build. There are no requirements on the specific format of this field, 200 except that it MUST NOT be null or the empty string ("").</td> 201 </tr> 202 <tr> 203 <td>SECURITY_PATCH</td> 204 <td>A value indicating the security patch level of a build. It MUST signify 205 that the build is not in any way vulnerable to any of the issues described 206 up through the designated Android Public Security Bulletin. It MUST be in 207 the format [YYYY-MM-DD], matching a defined string documented in the 208 <a href="http://source.android.com/security/bulletin"> Android Public Security 209 Bulletin</a> or in the <a href="http://source.android.com/security/advisory"> 210 Android Security Advisory</a>, for example "2015-11-01".</td> 211 </tr> 212 <tr> 213 <td>BASE_OS</td> 214 <td>A value representing the FINGERPRINT parameter of the build that is 215 otherwise identical to this build except for the patches provided in the 216 Android Public Security Bulletin. It MUST report the correct value and if 217 such a build does not exist, report an empty string ("").</td> 218 </tr> 219 <tr> 220 <td><a href="https://developer.android.com/reference/android/os/Build.html#BOOTLOADER">BOOTLOADER</a></td> 221 <td> A value chosen by the device implementer identifying the specific 222 internal bootloader version used in the device, in human-readable format. 223 The value of this field MUST be encodable as 7-bit ASCII and match the 224 regular expression “^[a-zA-Z0-9._-]+$”.</td> 225 </tr> 226 <tr> 227 <td><a href="https://developer.android.com/reference/android/os/Build.html#getRadioVersion()">getRadioVersion()</a></td> 228 <td> MUST (be or return) a value chosen by the device implementer 229 identifying the specific internal radio/modem version used in the device, 230 in human-readable format. If a device does not have any internal 231 radio/modem it MUST return NULL. The value of this field MUST be 232 encodable as 7-bit ASCII and match the regular expression 233 “^[a-zA-Z0-9._-,]+$”.</td> 234 </tr> 235 <tr> 236 <td><a href="https://developer.android.com/reference/android/os/Build.html#getSerial()">getSerial()</a></td> 237 <td> MUST (be or return) a hardware serial number, which MUST be available 238 and unique across devices with the same MODEL and MANUFACTURER. The value of 239 this field MUST be encodable as 7-bit ASCII and match the regular expression 240 “^[a-zA-Z0-9._-,]+$”.</td> 241 </tr> 242</table> 243 244### 3.2.3\. Intent Compatibility 245 246#### 3.2.3.1\. Common Application Intents 247 248Android intents allow application components to request functionality from 249other Android components. The Android upstream project includes a list of 250applications which implement several intent patterns to perform common actions. 251 252Device implementations: 253 254* [C-SR] Are STRONGLY RECOMMENDED to preload one or more applications or 255service components with an intent handler, for all the public intent filter 256patterns defined by the following application intents listed [here](https://developer.android.com/about/versions/11/reference/common-intents-30) 257and provide fulfillment i.e meet with the developer expectation for these common 258application intents as described in the SDK. 259 260Please refer to [Section 2](#2_device_types) for mandatory application intents 261for each device type. 262 263#### 3.2.3.2\. Intent Resolution 264 265* [C-0-1] As Android is an extensible platform, device implementations MUST 266allow each intent pattern referenced in [section 3.2.3.1](#3_2_3_1_common_application_intents) 267, except for Settings, to be overridden by third-party applications. The 268upstream Android open source implementation allows this by default. 269 270* [C-0-2] Device implementers MUST NOT attach special privileges to system 271applications' use of these intent patterns, or prevent third-party applications 272from binding to and assuming control of these patterns. This prohibition 273specifically includes but is not limited to disabling the “Chooser” user 274interface that allows the user to select between multiple applications that all 275handle the same intent pattern. 276 277* [C-0-3] Device implementations MUST provide a user interface for users to 278modify the default activity for intents. 279 280* However, device implementations MAY provide default activities for specific 281URI patterns (e.g. http://play.google.com) when the default activity provides a 282more specific attribute for the data URI. For example, an intent filter pattern 283specifying the data URI “http://www.android.com” is more specific than the 284browser's core intent pattern for “http://”. 285 286Android also includes a mechanism for third-party apps to declare an 287authoritative default [app linking behavior](https://developer.android.com/training/app-links) 288for certain types of web URI intents. When such authoritative declarations are 289defined in an app's intent filter patterns, device implementations: 290 291* [C-0-4] MUST attempt to validate any intent filters by performing the 292validation steps defined in the [Digital Asset Links specification](https://developers.google.com/digital-asset-links) 293as implemented by the Package Manager in the upstream Android Open Source 294Project. 295* [C-0-5] MUST attempt validation of the intent filters during the installation of 296the application and set all successfully validated URI intent filters as 297default app handlers for their URIs. 298* MAY set specific URI intent filters as default app handlers for their URIs, 299if they are successfully verified but other candidate URI filters fail 300verification. If a device implementation does this, it MUST provide the 301user appropriate per-URI pattern overrides in the settings menu. 302* MUST provide the user with per-app App Links controls in Settings as 303follows: 304 * [C-0-6] The user MUST be able to override holistically the default app 305 links behavior for an app to be: always open, always ask, or never open, 306 which must apply to all candidate URI intent filters equally. 307 * [C-0-7] The user MUST be able to see a list of the candidate URI intent 308 filters. 309 * The device implementation MAY provide the user with the ability to 310 override specific candidate URI intent filters that were successfully 311 verified, on a per-intent filter basis. 312 * [C-0-8] The device implementation MUST provide users with the ability to 313 view and override specific candidate URI intent filters if the device 314 implementation lets some candidate URI intent filters succeed 315 verification while some others can fail. 316 317#### 3.2.3.3\. Intent Namespaces 318 319* [C-0-1] Device implementations MUST NOT include any Android component that 320honors any new intent or broadcast intent patterns using an ACTION, CATEGORY, or 321other key string in the android.* or com.android.* namespace. 322* [C-0-2] Device implementers MUST NOT include any Android components that 323honor any new intent or broadcast intent patterns using an ACTION, CATEGORY, or 324other key string in a package space belonging to another organization. 325* [C-0-3] Device implementers MUST NOT alter or extend any of the intent 326patterns listed in [section 3.2.3.1](#3_2_3_1_common_application_intents). 327* Device implementations MAY include intent patterns using namespaces clearly 328and obviously associated with their own organization. This prohibition is 329analogous to that specified for Java language classes in [section 3.6](#3_6_api_namespaces). 330 331#### 3.2.3.4\. Broadcast Intents 332 333Third-party applications rely on the platform to broadcast certain intents to 334notify them of changes in the hardware or software environment. 335 336Device implementations: 337 338* [C-0-1] MUST broadcast the public broadcast intents listed [here](https://developer.android.com/about/versions/11/reference/broadcast-intents-30) 339in response to appropriate system events as described in the SDK documentation. 340Note that this requirement is not conflicting with section 3.5 as the 341limitation for background applications are also described in the SDK 342documentation. Also certain broadcast intents are conditional upon hardware 343support, if the device supports the necessary hardware they MUST broadcast the 344intents and provide the behavior inline with SDK documentation. 345 346#### 3.2.3.5\. Conditional Application Intents 347 348Android includes settings that provide users an easy way to select their 349default applications, for example for Home screen or SMS. 350 351Where it makes sense, device implementations MUST provide a similar settings 352menu and be compatible with the intent filter pattern and API methods described 353in the SDK documentation as below. 354 355If device implementations report `android.software.home_screen`, they: 356 357* [C-1-1] MUST honor the [`android.settings.HOME_SETTINGS`]( 358http://developer.android.com/reference/android/provider/Settings.html#ACTION_HOME_SETTINGS) 359intent to show a default app settings menu for Home Screen. 360 361If device implementations report `android.hardware.telephony`, they: 362 363* [C-2-1] MUST provide a settings menu that will call the 364[`android.provider.Telephony.ACTION_CHANGE_DEFAULT`]( 365http://developer.android.com/reference/android/provider/Telephony.Sms.Intents.html#ACTION_CHANGE_DEFAULT) 366intent to show a dialog to change the default SMS application. 367 368* [C-2-2] MUST honor the [`android.telecom.action.CHANGE_DEFAULT_DIALER`]( 369https://developer.android.com/reference/android/telecom/TelecomManager.html#ACTION_CHANGE_DEFAULT_DIALER) 370intent to show a dialog to allow the user to change the default Phone 371application. 372 * MUST use the user-selected default Phone app's UI for incoming and 373 outgoing calls except for emergency calls, which would use the 374 preinstalled Phone app. 375 376* [C-2-3] MUST honor the [android.telecom.action.CHANGE_PHONE_ACCOUNTS]( 377https://developer.android.com/reference/android/telecom/TelecomManager.html#ACTION_CHANGE_PHONE_ACCOUNTS) 378intent to provide user affordance to configure the [`ConnectionServices`]( 379https://developer.android.com/reference/android/telecom/ConnectionService.html) 380associated with the [`PhoneAccounts`]( 381https://developer.android.com/reference/android/telecom/PhoneAccount.html), as 382well as a default PhoneAccount that the telecommunications service provider will 383use to place outgoing calls. The AOSP implementation meets this requirement by 384including a "Calling Accounts option" menu within the "Calls" settings menu. 385 386* [C-2-4] MUST allow [`android.telecom.CallRedirectionService`](https://developer.android.com/reference/android/telecom/CallRedirectionService) 387for an app that holds the [`android.app.role.CALL_REDIRECTION`](https://developer.android.com/reference/android/app/role/RoleManager#ROLE_CALL_REDIRECTION) 388role. 389* [C-2-5] MUST provide the user affordance to choose an app that holds the 390[`android.app.role.CALL_REDIRECTION`](https://developer.android.com/reference/android/app/role/RoleManager#ROLE_CALL_REDIRECTION) 391role. 392* [C-2-6] MUST honor the [android.intent.action.SENDTO](https://developer.android.com/reference/android/content/Intent#ACTION_SENDTO) 393and [android.intent.action.VIEW](https://developer.android.com/reference/android/content/Intent#ACTION_VIEW) 394intents and provide an activity to send/display SMS messages. 395* [C-SR] Are Strongly Recommended to honor [android.intent.action.ANSWER](https://developer.android.com/reference/android/content/Intent#ACTION_ANSWER), 396[android.intent.action.CALL](https://developer.android.com/reference/android/content/Intent#ACTION_CALL), 397[android.intent.action.CALL_BUTTON](https://developer.android.com/reference/android/content/Intent#ACTION_CALL_BUTTON), 398[android.intent.action.VIEW](https://developer.android.com/reference/android/content/Intent#ACTION_VIEW) 399& [android.intent.action.DIAL](https://developer.android.com/reference/android/content/Intent#ACTION_DIAL) 400intents with a preloaded dialer application which can handle these intents and 401provide fulfillment as described in the SDK. 402 403If device implementations report `android.hardware.nfc.hce`, they: 404 405* [C-3-1] MUST honor the [android.settings.NFC_PAYMENT_SETTINGS]( 406http://developer.android.com/reference/android/provider/Settings.html#ACTION_NFC_PAYMENT_SETTINGS) 407intent to show a default app settings menu for Tap and Pay. 408* [C-3-2] MUST honor [android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT](https://developer.android.com/reference/android/nfc/cardemulation/CardEmulation#ACTION_CHANGE_DEFAULT) 409intent to show an activity which opens a dialog to ask the user to change the 410default card emulation service for a certain category as described in the SDK. 411 412If device implementations report `android.hardware.nfc`, they: 413 414* [C-4-1] MUST honor these intents [android.nfc.action.NDEF_DISCOVERED](https://developer.android.com/reference/android/nfc/NfcAdapter#ACTION_NDEF_DISCOVERED), 415[android.nfc.action.TAG_DISCOVERED](https://developer.android.com/reference/android/nfc/NfcAdapter#ACTION_TAG_DISCOVERED) 416& [android.nfc.action.TECH_DISCOVERED](https://developer.android.com/reference/android/nfc/NfcAdapter#ACTION_TECH_DISCOVERED), 417to show an activity which fulfils developer expectations for these intents as 418described in the SDK. 419 420If device implementations support the `VoiceInteractionService` and have more 421than one application using this API installed at a time, they: 422 423* [C-4-1] MUST honor the [`android.settings.ACTION_VOICE_INPUT_SETTINGS`](https://developer.android.com/reference/android/provider/Settings.html#ACTION_VOICE_INPUT_SETTINGS) 424intent to show a default app settings menu for voice input and assist. 425 426If device implementations report `android.hardware.bluetooth`, they: 427 428* [C-5-1] MUST honor the [‘android.bluetooth.adapter.action.REQUEST_ENABLE’](https://developer.android.com/reference/kotlin/android/bluetooth/BluetoothAdapter#action_request_enable) 429intent and show a system activity to allow the user to turn on Bluetooth. 430* [C-5-2] MUST honor the 431[‘android.bluetooth.adapter.action.REQUEST_DISCOVERABLE’](https://developer.android.com/reference/android/bluetooth/BluetoothAdapter#ACTION_REQUEST_DISCOVERABLE) 432intent and show a system activity that requests discoverable mode. 433 434If device implementations support the DND feature, they: 435 436* [C-6-1] MUST implement an activity that would respond to the intent 437[`ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS`](https://developer.android.com/reference/android/provider/Settings#ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS), 438which for implementations with UI_MODE_TYPE_NORMAL it MUST be an activity where 439the user can grant or deny the app access to DND policy configurations. 440 441If device implementations allow users to use third-party input methods on the 442device, they: 443 444* [C-7-1] MUST provide a user-accessible mechanism to add and configure 445third-party input methods in response to the 446[`android.settings.INPUT_METHOD_SETTINGS`](https://developer.android.com/reference/android/provider/Settings#ACTION_INPUT_METHOD_SETTINGS) 447intent. 448 449If device implementations support third-party accessibility services, they: 450 451* [C-8-1] MUST honor the [`android.settings.ACCESSIBILITY_SETTINGS`](https://developer.android.com/reference/android/provider/Settings#ACTION_ACCESSIBILITY_SETTINGS) 452intent to provide a user-accessible mechanism to enable and disable the 453third-party accessibility services alongside the preloaded accessibility 454services. 455 456If device implementations include support for Wi-Fi Easy Connect and expose the 457functionality to third-party apps, they: 458 459* [C-9-1] MUST implement the [Settings#ACTION_PROCESS_WIFI_EASY_CONNECT_URI](https://developer.android.com/reference/android/provider/Settings.html#ACTION_PROCESS_WIFI_EASY_CONNECT_URI) 460Intent APIs as described in the SDK documentation. 461 462If device implementations provide the data saver mode, they: 463* [C-10-1] MUST provide a user interface in the settings, that handles the 464[`Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS`](https://developer.android.com/reference/android/provider/Settings.html#ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS) 465intent, allowing users to add applications to or remove applications from 466the allow list. 467 468If device implementations do not provide the data saver mode, they: 469 470* [C-11-1] MUST have an activity that handles the 471[`Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS`](https://developer.android.com/reference/android/provider/Settings#ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS) 472intent but MAY implement it as a no-op. 473 474If device implementations declare the support for camera via 475`android.hardware.camera.any` they: 476 477* [C-12-1] MUST honor the [`android.media.action.STILL_IMAGE_CAMERA`](https://developer.android.com/reference/android/provider/MediaStore#INTENT_ACTION_STILL_IMAGE_CAMERA) 478and [`android.media.action.STILL_IMAGE_CAMERA_SECURE`](https://developer.android.com/reference/android/provider/MediaStore#INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE) 479intent and launch the camera in still image mode as described in the SDK. 480* [C-12-2] MUST honor the [`android.media.action.VIDEO_CAMERA`](https://developer.android.com/reference/android/provider/MediaStore#INTENT_ACTION_VIDEO_CAMERA) 481intent to launch the camera in video mode as described in the SDK. 482* [C-12-3] MUST honor only allow preinstalled Android applications to handle 483the following intents [`MediaStore.ACTION_IMAGE_CAPTURE`](https://developer.android.com/reference/android/provider/MediaStore.html#ACTION_IMAGE_CAPTURE), 484[`MediaStore.ACTION_IMAGE_CAPTURE_SECURE`](https://developer.android.com/reference/android/provider/MediaStore.html#ACTION_IMAGE_CAPTURE_SECURE), 485and [`MediaStore.ACTION_VIDEO_CAPTURE`](https://developer.android.com/reference/android/provider/MediaStore.html#ACTION_VIDEO_CAPTURE) 486as described in the [SDK document](https://developer.android.com/preview/behavior-changes-11?hl=zh-tw#media-capture). 487 488If device implementations report `android.software.device_admin`, they: 489 490* [C-13-1] MUST honor the intent [`android.app.action.ADD_DEVICE_ADMIN`](https://developer.android.com/reference/android/app/admin/DevicePolicyManager#ACTION_ADD_DEVICE_ADMIN) 491to invoke a UI to bring the user through adding the device administrator to 492the system (or allowing them to reject it). 493 494* [C-13-2] MUST honor the intents 495[android.app.action.ADMIN_POLICY_COMPLIANCE](https://developer.android.com/reference/android/app/admin/DevicePolicyManager#ACTION_ADMIN_POLICY_COMPLIANCE), 496[android.app.action.GET_PROVISIONING_MODE](https://developer.android.com/reference/android/app/admin/DevicePolicyManager#ACTION_GET_PROVISIONING_MODE), 497[android.app.action.PROVISIONING_SUCCESSFUL](https://developer.android.com/reference/android/app/admin/DevicePolicyManager#ACTION_PROVISIONING_SUCCESSFUL), 498[android.app.action.PROVISION_MANAGED_DEVICE](https://developer.android.com/reference/android/app/admin/DevicePolicyManager#ACTION_PROVISION_MANAGED_DEVICE), 499[android.app.action.PROVISION_MANAGED_PROFILE](https://developer.android.com/reference/android/app/admin/DevicePolicyManager#ACTION_PROVISION_MANAGED_PROFILE), 500[android.app.action.SET_NEW_PARENT_PROFILE_PASSWORD](https://developer.android.com/reference/android/app/admin/DevicePolicyManager#ACTION_SET_NEW_PARENT_PROFILE_PASSWORD), 501[android.app.action.SET_NEW_PASSWORD](https://developer.android.com/reference/android/app/admin/DevicePolicyManager#ACTION_SET_NEW_PASSWORD) 502& [android.app.action.START_ENCRYPTION](https://developer.android.com/reference/android/app/admin/DevicePolicyManager#ACTION_START_ENCRYPTION) 503and have an activity to provide fulfillment for these intents as described 504in SDK [here](https://developer.android.com/reference/android/app/admin/DevicePolicyManager). 505 506If device implementations declare the [`android.software.autofill`](https://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_AUTOFILL) 507feature flag, they: 508 509* [C-14-1] MUST fully implement the [`AutofillService`](https://developer.android.com/reference/android/service/autofill/AutofillService.html) 510and [`AutofillManager`](https://developer.android.com/reference/android/view/autofill/AutofillManager.html) 511APIs and honor the [android.settings.REQUEST_SET_AUTOFILL_SERVICE](https://developer.android.com/reference/android/provider/Settings.html#ACTION_REQUEST_SET_AUTOFILL_SERVICE) 512intent to show a default app settings menu to enable and disable autofill and 513change the default autofill service for the user. 514 515If device implementations include a pre-installed app or wish to allow 516third-party apps to access the usage statistics, they: 517 518* [C-SR] are STRONGLY RECOMMENDED provide user-accessible mechanism to grant 519or revoke access to the usage stats in response to the 520[android.settings.ACTION_USAGE_ACCESS_SETTINGS](https://developer.android.com/reference/android/provider/Settings.html#ACTION_USAGE_ACCESS_SETTINGS) 521intent for apps that declare the `android.permission.PACKAGE_USAGE_STATS` 522permission. 523 524If device implementations intend to disallow any apps, including pre-installed 525apps, from accessing the usage statistics, they: 526 527* [C-15-1] MUST still have an activity that handles the 528[android.settings.ACTION_USAGE_ACCESS_SETTINGS](https://developer.android.com/reference/android/provider/Settings.html#ACTION_USAGE_ACCESS_SETTINGS) 529intent pattern but MUST implement it as a no-op, that is to have an equivalent 530behavior as when the user is declined for access. 531 532If device implementations report the feature `android.hardware.audio.output`, 533they: 534 535* [C-SR] Are Strongly Recommended to honor android.intent.action.TTS_SERVICE, 536android.speech.tts.engine.INSTALL_TTS_DATA & 537android.speech.tts.engine.GET_SAMPLE_TEXT intents have an activity to provide 538fulfillment for these intents as described in SDK [here](https://developer.android.com/reference/android/speech/tts/TextToSpeech.Engine). 539 540Android includes support for interactive screensavers, previously referred to 541as Dreams. Screen Savers allow users to interact with applications when a device 542connected to a power source is idle or docked in a desk dock. 543Device Implementations: 544 545* SHOULD include support for screen savers and provide a settings option for 546users to configure screen savers in response to the 547`android.settings.DREAM_SETTINGS` intent. 548 549### 3.2.4\. Activities on secondary/multiple displays 550 551If device implementations allow launching normal [Android Activities]( 552https://developer.android.com/reference/android/app/Activity.html) on more than 553one display, they: 554 555* [C-1-1] MUST set the `android.software.activities_on_secondary_displays` 556 feature flag. 557* [C-1-2] MUST guarantee API compatibility similar to an activity running on 558 the primary display. 559* [C-1-3] MUST land the new activity on the same display as the activity that 560 launched it, when the new activity is launched without specifying a target 561 display via the [`ActivityOptions.setLaunchDisplayId()`]( 562 https://developer.android.com/reference/android/app/ActivityOptions.html#setLaunchDisplayId%28int%29) 563 API. 564* [C-1-4] MUST destroy all activities, when a display with the 565 [`Display.FLAG_PRIVATE`](http://developer.android.com/reference/android/view/Display.html#FLAG_PRIVATE) 566 flag is removed. 567* [C-1-5] MUST securely hide content on all screens when the device is locked 568 with a secure lock screen, unless the app opts in to show on top of lock 569 screen using [`Activity#setShowWhenLocked()`]( 570 https://developer.android.com/reference/android/app/Activity#setShowWhenLocked%28boolean%29) 571 API. 572* SHOULD have [`android.content.res.Configuration`]( 573 https://developer.android.com/reference/android/content/res/Configuration.html) 574 which corresponds to that display in order to be displayed, operate 575 correctly, and maintain compatibility if an activity is launched on 576 secondary display. 577 578If device implementations allow launching normal [Android Activities]( 579https://developer.android.com/reference/android/app/Activity.html) on secondary 580displays and a secondary display has the [android.view.Display.FLAG_PRIVATE]( 581https://developer.android.com/reference/android/view/Display.html#FLAG_PRIVATE) 582flag: 583 584* [C-3-1] Only the owner of that display, system, and activities that are 585 already on that display MUST be able to launch to it. Everyone can launch to 586 a display that has [android.view.Display.FLAG_PUBLIC](https://developer.android.com/reference/android/view/Display.html#FLAG_PUBLIC) 587 flag. 588