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 &ldquo;^[^ :\/~]+$&rdquo;.</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 &ldquo;^[a-zA-Z0-9_-]+$&rdquo;.</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 &ldquo;^[a-zA-Z0-9_-]+$&rdquo;.</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    &ldquo;^[a-zA-Z0-9_-]+$&rdquo;. 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        &nbsp;&nbsp;&nbsp;&nbsp;$(DEVICE):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)</p>
120    <p>For example:</p>
121<p class="small">acme/myproduct/<br>
122      &nbsp;&nbsp;&nbsp;&nbsp;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    &ldquo;^[a-zA-Z0-9_-]+$&rdquo;.</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 &ldquo;^[a-zA-Z0-9._-]+$&rdquo;.</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 &ldquo;^[a-zA-Z0-9_-]+$&rdquo;. 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 &ldquo;^[a-zA-Z0-9._-]+&rdquo; 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 &ldquo;^[a-zA-Z0-9._-]+$&rdquo;.</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    &ldquo;^[a-zA-Z0-9._-,]+$&rdquo;.</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    &ldquo;^[a-zA-Z0-9._-,]+$&rdquo;.</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&lowbar;USAGE&lowbar;ACCESS&lowbar;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&lowbar;USAGE&lowbar;ACCESS&lowbar;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