1## 7.4\. Data Connectivity
2
3### 7.4.1\. Telephony
4
5“Telephony” as used by the Android APIs and this document refers specifically
6to hardware related to placing voice calls and sending SMS messages via a GSM
7or CDMA network. While these voice calls may or may not be packet-switched,
8they are for the purposes of Android considered independent of any data
9connectivity that may be implemented using the same network. In other words,
10the Android “telephony” functionality and APIs refer specifically to voice
11calls and SMS. For instance, device implementations that cannot place calls or
12send/receive SMS messages are not considered a telephony device, regardless of
13whether they use a cellular network for data connectivity.
14
15*    Android MAY be used on devices that do not include telephony hardware. That
16is, Android is compatible with devices that are not phones.
17
18If device implementations include GSM or CDMA telephony, they:
19
20*   [C-1-1] MUST declare the `android.hardware.telephony` feature flag and
21other sub-feature flags according to the technology.
22*   [C-1-2] MUST implement full support for the API for that technology.
23
24If device implementations do not include telephony hardware, they:
25
26*    [C-2-1] MUST implement the full APIs as no-ops.
27
28If device implementations support eUICCs or eSIMs/embedded SIMs and include
29a proprietary mechanism to make eSIM functionality available for third-party
30developers, they:
31
32*    [C-3-1] MUST provide a complete implementation of the [`EuiccManager API`](
33https://developer.android.com/reference/android/telephony/euicc/EuiccManager).
34
35#### 7.4.1.1\. Number Blocking Compatibility
36
37If device implementations report the `android.hardware.telephony feature`, they:
38
39*    [C-1-1] MUST include number blocking support
40*    [C-1-2] MUST fully implement [`BlockedNumberContract`](
41http://developer.android.com/reference/android/provider/BlockedNumberContract.html)
42and the corresponding API as described in the SDK documentation.
43*    [C-1-3] MUST block all calls and messages from a phone number in
44'BlockedNumberProvider' without any interaction with apps. The only exception
45is when number blocking is temporarily lifted as described in the SDK
46documentation.
47*    [C-1-4] MUST NOT write to the [platform call log provider](
48http://developer.android.com/reference/android/provider/CallLog.html)
49for a blocked call.
50*    [C-1-5] MUST NOT write to the [Telephony provider](
51http://developer.android.com/reference/android/provider/Telephony.html)
52for a blocked message.
53*    [C-1-6] MUST implement a blocked numbers management UI, which is opened
54with the intent returned by `TelecomManager.createManageBlockedNumbersIntent()`
55method.
56*    [C-1-7] MUST NOT allow secondary users to view or edit the blocked numbers
57on the device as the Android platform assumes the primary user to have full
58control of the telephony services, a single instance, on the device. All
59blocking related UI MUST be hidden for secondary users and the blocked list MUST
60still be respected.
61*   SHOULD migrate the blocked numbers into the provider when a device updates
62to Android 7.0.
63
64#### 7.4.1.2\. Telecom API
65
66If device implementations report `android.hardware.telephony`, they:
67
68*   [C-1-1] MUST support the `ConnectionService` APIs described in the [SDK](
69    https://developer.android.com/guide/topics/connectivity/telecom/selfManaged.html).
70*   [C-1-2] MUST display a new incoming call and provide user affordance to
71    accept or reject the incoming call when the user is on an ongoing call
72    that is made by a third-party app that does not support the hold feature
73    specified via
74    [`CAPABILITY_SUPPORT_HOLD`](
75    https://developer.android.com/reference/android/telecom/Connection.html#CAPABILITY_SUPPORT_HOLD).
76*   [C-1-3] MUST have an application that implements
77    [InCallService](https://developer.android.com/reference/android/telecom/InCallService).
78*   [C-SR] Are STRONGLY RECOMMENDED to notify the user that answering an
79    incoming call will drop an ongoing call.
80
81    The AOSP implementation meets these requirements by a heads-up notification
82    which indicates to the user that answering an incoming call will cause the
83    other call to be dropped.
84
85*   [C-SR] Are STRONGLY RECOMMENDED to preload the default dialer app that
86    shows a call log entry and the name of a third-party app in its call log
87    when the third-party app sets the
88    [`EXTRA_LOG_SELF_MANAGED_CALLS`](
89    https://developer.android.com/reference/android/telecom/PhoneAccount.html#EXTRA_LOG_SELF_MANAGED_CALLS)
90    extras key on its `PhoneAccount` to `true`.
91*   [C-SR] Are STRONGLY RECOMMENDED to handle the audio headset's
92    `KEYCODE_MEDIA_PLAY_PAUSE` and `KEYCODE_HEADSETHOOK` events for the
93    [`android.telecom`](https://developer.android.com/reference/android/telecom/package-summary.html)
94    APIs as below:
95    *   Call [`Connection.onDisconnect()`](https://developer.android.com/reference/android/telecom/Connection.html#onDisconnect%28%29)
96        when a short press of the key event is detected during an ongoing call.
97    *   Call [`Connection.onAnswer()`](https://developer.android.com/reference/android/telecom/Connection.html#onAnswer%28%29)
98        when a short press of the key event is detected during an incoming call.
99    *   Call [`Connection.onReject()`](https://developer.android.com/reference/android/telecom/Connection.html#onReject%28%29)
100        when a long press of the key event is detected during an incoming call.
101    *   Toggle the mute status of the [`CallAudioState`](https://developer.android.com/reference/android/telecom/CallAudioState.html).
102
103
104### 7.4.2\. IEEE 802.11 (Wi-Fi)
105
106Device implementations:
107
108*   SHOULD include support for one or more forms of 802.11\.
109
110If device implementations include support for 802.11 and expose the
111functionality to a third-party application, they:
112
113*   [C-1-1] MUST implement the corresponding Android API.
114*   [C-1-2] MUST report the hardware feature flag `android.hardware.wifi`.
115*   [C-1-3] MUST implement the [multicast API](http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html)
116    as described in the SDK documentation.
117*   [C-1-4] MUST support multicast DNS (mDNS) and MUST NOT filter mDNS packets
118    (224.0.0.251) at any time of operation including:
119    *   Even when the screen is not in an active state.
120    *   For Android Television device implementations, even when in standby
121power states.
122*   [C-1-5] MUST NOT treat the [`WifiManager.enableNetwork()`](
123    https://developer.android.com/reference/android/net/wifi/WifiManager.html#enableNetwork%28int%2C%20boolean%29)
124    API method call as a sufficient indication to switch the currently active
125    `Network` that is used by default for application traffic and is returned
126    by [`ConnectivityManager`](https://developer.android.com/reference/android/net/ConnectivityManager)
127    API methods such as [`getActiveNetwork`](https://developer.android.com/reference/android/net/ConnectivityManager#getActiveNetwork%28%29)
128    and [`registerDefaultNetworkCallback`](https://developer.android.com/reference/android/net/ConnectivityManager#registerDefaultNetworkCallback%28android.net.ConnectivityManager.NetworkCallback,%20android.os.Handler%29).
129    In other words, they MAY only disable the Internet access provided by any
130    other network provider (e.g. mobile data) if they successfully validate
131    that the Wi-Fi network is providing Internet access.
132*   [C-1-6] Are STRONGLY RECOMMENDED to, when the
133    [`ConnectivityManager.reportNetworkConnectivity()`](
134    https://developer.android.com/reference/android/net/ConnectivityManager.html#reportNetworkConnectivity%28android.net.Network%2C%20boolean%29)
135    API method is called, re-evaluate the Internet access on the `Network` and,
136    once the evaluation determines that the current `Network` no longer provides
137    Internet access, switch to any other available network (e.g. mobile
138    data) that provides Internet access.
139*   [C-SR] Are STRONGLY RECOMMENDED to randomize the source MAC address and
140sequence number of probe request frames, once at the beginning of each scan,
141while STA is disconnected.
142    * Each group of probe request frames comprising one scan should use one
143    consistent MAC address (SHOULD NOT randomize MAC address halfway through a
144    scan).
145    * Probe request sequence number should iterate as normal (sequentially)
146    between the probe requests in a scan.
147    * Probe request sequence number should randomize between the last probe
148    request of a scan and the first probe request of the next scan.
149*   [C-SR] Are STRONGLY RECOMMENDED, while STA is disconnected, to allow only
150the following elements in probe request frames:
151    * SSID Parameter Set (0)
152    * DS Parameter Set (3)
153
154If device implementations include support for Wi-Fi power save mode as defined
155in IEEE 802.11 standard, they:
156
157*   [C-3-1] MUST turn off Wi-Fi power save mode whenever an app acquires
158    `WIFI_MODE_FULL_HIGH_PERF` lock or `WIFI_MODE_FULL_LOW_LATENCY` lock
159    via [`WifiManager.createWifiLock()`](
160    https://developer.android.com/reference/android/net/wifi/WifiManager.html#createWifiLock\(int,%2520java.lang.String\))
161    and  [`WifiManager.WifiLock.acquire()`](
162    https://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html#acquire\(\))
163    APIs and the lock is active.
164*   [C-3-2] The average round trip latency between the device
165    and an access point while the device is in a Wi-Fi Low Latency Lock
166    (`WIFI_MODE_FULL_LOW_LATENCY`) mode MUST be smaller than the
167    latency during a Wi-Fi High Perf Lock (`WIFI_MODE_FULL_HIGH_PERF`) mode.
168*   [C-SR] Are STRONGLY RECOMMENDED to minimize Wi-Fi round trip latency
169    whenever a Low Latency Lock (`WIFI_MODE_FULL_LOW_LATENCY`) is acquired
170    and takes effect.
171
172If device implementations support Wi-Fi and use Wi-Fi for location scanning,
173they:
174
175*    [C-2-1] MUST provide a user affordance to enable/disable the value read
176     through the [`WifiManager.isScanAlwaysAvailable`](https://developer.android.com/reference/android/net/wifi/WifiManager.html#isScanAlwaysAvailable%28%29)
177     API method.
178
179#### 7.4.2.1\. Wi-Fi Direct
180
181Device implementations:
182
183*   SHOULD include support for Wi-Fi Direct (Wi-Fi peer-to-peer).
184
185If device implementations include support for Wi-Fi Direct, they:
186
187*   [C-1-1] MUST implement the [corresponding Android API](
188    http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html)
189    as described in the SDK documentation.
190*   [C-1-2] MUST report the hardware feature `android.hardware.wifi.direct`.
191*   [C-1-3] MUST support regular Wi-Fi operation.
192*   [C-1-4] MUST support Wi-Fi and Wi-Fi Direct operations concurrently.
193
194#### 7.4.2.2\. Wi-Fi Tunneled Direct Link Setup
195
196Device implementations:
197
198*    SHOULD include support for
199     [Wi-Fi Tunneled Direct Link Setup (TDLS)](
200     http://developer.android.com/reference/android/net/wifi/WifiManager.html)
201     as described in the Android SDK Documentation.
202
203If device implementations include support for TDLS and TDLS is enabled by the
204WiFiManager API, they:
205
206*   [C-1-1] MUST declare support for TDLS through [`WifiManager.isTdlsSupported`]
207(https://developer.android.com/reference/android/net/wifi/WifiManager.html#isTdlsSupported%28%29).
208*   SHOULD use TDLS only when it is possible AND beneficial.
209*   SHOULD have some heuristic and NOT use TDLS when its performance might be
210    worse than going through the Wi-Fi access point.
211
212#### 7.4.2.3\. Wi-Fi Aware
213
214Device implementations:
215
216*    SHOULD include support for [Wi-Fi Aware](
217     http://www.wi-fi.org/discover-wi-fi/wi-fi-aware).
218
219If device implementations include support for Wi-Fi Aware and expose the
220functionality to third-party apps, then they:
221
222*   [C-1-1] MUST implement the `WifiAwareManager` APIs as described in the
223[SDK documentation](
224http://developer.android.com/reference/android/net/wifi/aware/WifiAwareManager.html).
225*   [C-1-2] MUST declare the `android.hardware.wifi.aware` feature flag.
226*   [C-1-3] MUST support Wi-Fi and Wi-Fi Aware operations concurrently.
227*   [C-1-4] MUST randomize the Wi-Fi Aware management interface address at intervals
228    no longer than 30 minutes and whenever Wi-Fi Aware is enabled.
229
230If device implementations include support for Wi-Fi Aware and
231Wi-Fi Location as described in [Section 7.4.2.5](#7_4_2_5_Wi-Fi_Location) and
232exposes these functionalities to third-party apps, then they:
233
234*   [C-2-1] MUST implement the location-aware discovery APIs: [setRangingEnabled](
235https://developer.android.com/reference/android/net/wifi/aware/PublishConfig.Builder.html#setRangingEnabled%28boolean%29),
236 [setMinDistanceMm](
237https://developer.android.com/reference/android/net/wifi/aware/SubscribeConfig.Builder#setMinDistanceMm%28int%29),
238 [setMaxDistanceMm](
239https://developer.android.com/reference/android/net/wifi/aware/SubscribeConfig.Builder#setMaxDistanceMm%28int%29)
240, and
241 [onServiceDiscoveredWithinRange](
242https://developer.android.com/reference/android/net/wifi/aware/DiscoverySessionCallback#onServiceDiscoveredWithinRange%28android.net.wifi.aware.PeerHandle,%20byte[],%20java.util.List%3Cbyte[]%3E,%20int%29).
243
244#### 7.4.2.4\. Wi-Fi Passpoint
245
246Device implementations:
247
248*    SHOULD include support for [Wi-Fi Passpoint](
249     http://www.wi-fi.org/discover-wi-fi/wi-fi-certified-passpoint).
250
251If device implementations include support for Wi-Fi Passpoint, they:
252
253*  [C-1-1] MUST implement the Passpoint related `WifiManager` APIs as
254described in the [SDK documentation](
255http://developer.android.com/reference/android/net/wifi/WifiManager.html).
256*  [C-1-2] MUST support IEEE 802.11u standard, specifically related
257   to Network Discovery and Selection, such as Generic Advertisement
258   Service (GAS) and Access Network Query Protocol (ANQP).
259
260Conversely if device implementations do not include support for Wi-Fi
261Passpoint:
262
263*    [C-2-1] The implementation of the Passpoint related `WifiManager`
264APIs MUST throw an `UnsupportedOperationException`.
265
266#### 7.4.2.5\. Wi-Fi Location (Wi-Fi Round Trip Time - RTT)
267
268Device implementations:
269
270*    SHOULD include support for [Wi-Fi Location](
271     https://www.wi-fi.org/discover-wi-fi/wi-fi-location).
272
273If device implementations include support for Wi-Fi Location and expose the
274functionality to third-party apps, then they:
275
276*   [C-1-1] MUST implement the `WifiRttManager` APIs as described in the
277[SDK documentation](
278http://developer.android.com/reference/android/net/wifi/rtt/WifiRttManager.html).
279*   [C-1-2] MUST declare the `android.hardware.wifi.rtt` feature flag.
280*   [C-1-3] MUST randomize the source MAC address for each RTT burst
281    which is executed while the Wi-Fi interface on which the RTT is
282    being executed is not associated to an Access Point.
283
284#### 7.4.2.6\. Wi-Fi Keepalive Offload
285
286Device implementations:
287
288*   SHOULD include support for Wi-Fi keepalive offload.
289
290If device implementations include support for Wi-Fi keepalive offload and
291expose the functionality to third-party apps, they:
292
293*   [C-1-1] MUST support the
294[SocketKeepAlive](https://developer.android.google.com/reference/android/net/SocketKeepalive.html) API.
295
296*   [C-1-2] MUST support at least three concurrent keepalive slots over Wi-Fi and
297at least one keepalive slot over cellular.
298
299If device implementations do not include support for Wi-Fi keepalive offload,
300they:
301
302*   [C-2-1] MUST return [`ERROR_UNSUPPORTED`](
303https://developer.android.google.com/reference/android/net/SocketKeepalive.html#ERROR_UNSUPPORTED).
304
305#### 7.4.2.7\. Wi-Fi Easy Connect (Device Provisioning Protocol)
306
307Device implementations:
308
309*    SHOULD include support for [Wi-Fi Easy Connect (DPP)](
310     https://www.wi-fi.org/file/wi-fi-certified-easy-connect-technology-overview).
311
312If device implementations include support for Wi-Fi Easy Connect and expose the
313functionality to third-party apps, they:
314
315*   [C-1-1] MUST implement the [`Settings#ACTION_PROCESS_WIFI_EASY_CONNECT_URI`](
316    https://developer.android.com/reference/android/provider/Settings.html#ACTION_PROCESS_WIFI_EASY_CONNECT_URI)
317    Intent APIs as described in the SDK documentation.
318*   [C-1-2] MUST have the [WifiManager#isEasyConnectSupported\(\)](
319    https://developer.android.com/reference/android/net/wifi/WifiManager.html#isEasyConnectSupported\(\))
320    method return `true`.
321
322
323### 7.4.3\. Bluetooth
324
325If device implementations support Bluetooth Audio profile, they:
326
327*    SHOULD support Advanced Audio Codecs and Bluetooth Audio Codecs
328(e.g. LDAC).
329
330If device implementations support HFP, A2DP and AVRCP, they:
331
332*    SHOULD support at least 5 total connected devices.
333
334If device implementations declare `android.hardware.vr.high_performance`
335feature, they:
336
337*    [C-1-1] MUST support Bluetooth 4.2 and Bluetooth LE Data Length Extension.
338
339Android includes support for [Bluetooth and Bluetooth Low Energy](
340http://developer.android.com/reference/android/bluetooth/package-summary.html).
341
342If device implementations include support for Bluetooth and Bluetooth
343Low Energy, they:
344
345*    [C-2-1] MUST declare the relevant platform features
346(`android.hardware.bluetooth` and `android.hardware.bluetooth_le`
347respectively) and implement the platform APIs.
348*    SHOULD implement relevant Bluetooth profiles such as
349     A2DP, AVRCP, OBEX, HFP, etc. as appropriate for the device.
350
351If device implementations include support for Bluetooth Low Energy, they:
352
353*   [C-3-1] MUST declare the hardware feature `android.hardware.bluetooth_le`.
354*   [C-3-2] MUST enable the GATT (generic attribute profile) based Bluetooth
355APIs as described in the SDK documentation and
356[android.bluetooth](
357http://developer.android.com/reference/android/bluetooth/package-summary.html).
358*   [C-3-3] MUST report the correct value for
359`BluetoothAdapter.isOffloadedFilteringSupported()` to indicate whether the
360filtering logic for the [ScanFilter](
361https://developer.android.com/reference/android/bluetooth/le/ScanFilter.html)
362API classes is implemented.
363*   [C-3-4] MUST report the correct value for
364`BluetoothAdapter.isMultipleAdvertisementSupported()` to indicate
365whether Low Energy Advertising is supported.
366*   SHOULD support offloading of the filtering logic to the bluetooth chipset
367when implementing the [ScanFilter API](
368https://developer.android.com/reference/android/bluetooth/le/ScanFilter.html).
369*   SHOULD support offloading of the batched scanning to the bluetooth chipset.
370*   SHOULD support multi advertisement with at least 4 slots.
371
372
373*   [SR] STRONGLY RECOMMENDED to implement a Resolvable Private Address (RPA)
374timeout no longer than 15 minutes and rotate the address at timeout to protect
375user privacy.
376
377If device implementations support Bluetooth LE and use Bluetooth LE for
378location scanning, they:
379
380*    [C-4-1] MUST provide a user affordance to enable/disable the value read
381     through the System API `BluetoothAdapter.isBleScanAlwaysAvailable()`.
382
383If device implementations include support for Bluetooth LE and Hearing Aids
384Profile, as described in
385[Hearing Aid Audio Support Using Bluetooth LE](
386https://source.android.com/devices/bluetooth/asha), they:
387
388*   [C-5-1] MUST return `true` for
389[BluetoothAdapter.getProfileProxy(context, listener, BluetoothProfile.HEARING_AID)](
390https://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#getProfileProxy(android.content.Context,%20android.bluetooth.BluetoothProfile.ServiceListener,%20int)).
391
392### 7.4.4\. Near-Field Communications
393
394Device implementations:
395
396*    SHOULD include a transceiver and related hardware for Near-Field
397Communications (NFC).
398*    [C-0-1] MUST implement `android.nfc.NdefMessage` and
399`android.nfc.NdefRecord` APIs even if they do not include support for NFC or
400declare the `android.hardware.nfc` feature as the classes represent a
401protocol-independent data representation format.
402
403
404If device implementations include NFC hardware and plan to make it available to
405third-party apps, they:
406
407*   [C-1-1] MUST report the `android.hardware.nfc` feature from the
408[`android.content.pm.PackageManager.hasSystemFeature()` method](
409http://developer.android.com/reference/android/content/pm/PackageManager.html).
410*   MUST be capable of reading and writing NDEF messages via the following NFC
411standards as below:
412*   [C-1-2] MUST be capable of acting as an NFC Forum reader/writer
413(as defined by the NFC Forum technical specification
414NFCForum-TS-DigitalProtocol-1.0) via the following NFC standards:
415     *   NfcA (ISO14443-3A)
416     *   NfcB (ISO14443-3B)
417     *   NfcF (JIS X 6319-4)
418     *   IsoDep (ISO 14443-4)
419     *   NFC Forum Tag Types 1, 2, 3, 4, 5 (defined by the NFC Forum)
420*   [SR] STRONGLY RECOMMENDED to be capable of reading and writing NDEF
421    messages as well as raw data via the following NFC standards. Note that
422    while the NFC standards are stated as STRONGLY RECOMMENDED, the
423    Compatibility Definition for a future version is planned to change these
424    to MUST. These standards are optional in this version but will be required
425    in future versions. Existing and new devices that run this version of
426    Android are very strongly encouraged to meet these requirements now so
427    they will be able to upgrade to the future platform releases.
428
429*   [C-1-13] MUST poll for all supported technologies while in NFC discovery
430    mode.
431*   SHOULD be in NFC discovery mode while the device is awake with the
432screen active and the lock-screen unlocked.
433*   SHOULD be capable of reading the barcode and URL (if encoded) of
434    [Thinfilm NFC Barcode](
435    http://developer.android.com/reference/android/nfc/tech/NfcBarcode.html)
436    products.
437
438Note that publicly available links are not available for the JIS, ISO, and NFC
439Forum specifications cited above.
440
441Android includes support for NFC Host Card Emulation (HCE) mode.
442
443If device implementations include an NFC controller chipset capable of HCE (for
444NfcA and/or NfcB) and support Application ID (AID) routing, they:
445
446*   [C-2-1] MUST report the `android.hardware.nfc.hce` feature constant.
447*   [C-2-2] MUST support [NFC HCE APIs](
448http://developer.android.com/guide/topics/connectivity/nfc/hce.html) as
449defined in the Android SDK.
450
451If device implementations include an NFC controller chipset capable of HCE
452for NfcF, and implement the feature for third-party applications, they:
453
454*   [C-3-1] MUST report the `android.hardware.nfc.hcef` feature constant.
455*   [C-3-2] MUST implement the [NfcF Card Emulation APIs](
456https://developer.android.com/reference/android/nfc/cardemulation/NfcFCardEmulation.html)
457as defined in the Android SDK.
458
459If device implementations include general NFC support as described in this
460section and support MIFARE technologies (MIFARE Classic,
461MIFARE Ultralight, NDEF on MIFARE Classic) in the reader/writer role, they:
462
463*   [C-4-1] MUST implement the corresponding Android APIs as documented by
464the Android SDK.
465*   [C-4-2] MUST report the feature `com.nxp.mifare` from the
466[`android.content.pm.PackageManager.hasSystemFeature`()](
467http://developer.android.com/reference/android/content/pm/PackageManager.html)
468method. Note that this is not a standard Android feature and as such does not
469appear as a constant in the `android.content.pm.PackageManager` class.
470
471### 7.4.5\. Minimum Network Capability
472
473Device implementations:
474
475*   [C-0-1] MUST include support for one or more forms of
476data networking. Specifically, device implementations MUST include support for
477at least one data standard capable of 200 Kbit/sec or greater. Examples of
478    technologies that satisfy this requirement include EDGE, HSPA, EV-DO,
479    802.11g, Ethernet and Bluetooth PAN.
480*   SHOULD also include support for at least one common wireless data
481standard, such as 802.11 (Wi-Fi), when a physical networking standard (such as
482Ethernet) is the primary data connection.
483*   MAY implement more than one form of data connectivity.
484*   [C-0-2] MUST include an IPv6 networking stack and support IPv6
485communication using the managed APIs, such as `java.net.Socket` and
486`java.net.URLConnection`, as well as the native APIs, such as `AF_INET6`
487sockets.
488*   [C-0-3] MUST enable IPv6 by default.
489   *   MUST ensure that IPv6 communication is as reliable as IPv4, for example:
490      *   [C-0-4] MUST maintain IPv6 connectivity in doze mode.
491      *   [C-0-5] Rate-limiting MUST NOT cause the device to lose IPv6
492      connectivity on any IPv6-compliant network that uses RA lifetimes of
493      at least 180 seconds.
494*   [C-0-6] MUST provide third-party applications with direct IPv6 connectivity
495to the network when connected to an IPv6 network, without any form of address or
496port translation happening locally on the device. Both managed APIs such as
497[`Socket#getLocalAddress`](
498https://developer.android.com/reference/java/net/Socket.html#getLocalAddress%28%29)
499or [`Socket#getLocalPort`](
500https://developer.android.com/reference/java/net/Socket.html#getLocalPort%28%29))
501and NDK APIs such as `getsockname()` or `IPV6_PKTINFO` MUST return the IP
502address and port that is actually used to send and receive packets on the
503network.
504
505
506The required level of IPv6 support depends on the network type, as shown in
507the following requirements.
508
509If device implementations support Wi-Fi, they:
510
511*   [C-1-1] MUST support dual-stack and IPv6-only operation on Wi-Fi.
512
513If device implementations support Ethernet, they:
514
515*   [C-2-1] MUST support dual-stack operation on Ethernet.
516
517If device implementations support Cellular data, they:
518
519*   SHOULD support IPv6 operation (IPv6-only and possibly dual-stack) on
520cellular.
521
522If device implementations support more than one network type (e.g., Wi-Fi
523and cellular data), they:
524
525*   [C-3-1] MUST simultaneously meet the above requirements on each network
526when the device is simultaneously connected to more than one network type.
527
528
529### 7.4.6\. Sync Settings
530
531Device implementations:
532
533*   [C-0-1] MUST have the master auto-sync setting on by default so that
534the method [`getMasterSyncAutomatically()`](
535    http://developer.android.com/reference/android/content/ContentResolver.html)
536    returns “true”.
537
538### 7.4.7\. Data Saver
539
540If device implementations include a metered connection, they are:
541
542*   [SR] STRONGLY RECOMMENDED to provide the data saver mode.
543
544If device implementations provide the data saver mode, they:
545
546*   [C-1-1] MUST support all the APIs in the `ConnectivityManager`
547class as described in the [SDK documentation](
548https://developer.android.com/training/basics/network-ops/data-saver.html)
549*   [C-1-2] MUST provide a user interface in the settings, that handles the
550    [`Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS`](
551    https://developer.android.com/reference/android/provider/Settings.html#ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS)
552    intent, allowing users to add applications to or remove applications
553    from the whitelist.
554
555If device implementations do not provide the data saver mode, they:
556
557*   [C-2-1] MUST return the value `RESTRICT_BACKGROUND_STATUS_DISABLED` for
558    [`ConnectivityManager.getRestrictBackgroundStatus()`](
559    https://developer.android.com/reference/android/net/ConnectivityManager.html#getRestrictBackgroundStatus%28%29)
560*   [C-2-2] MUST NOT broadcast
561`ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED`.
562*   [C-2-3] MUST have an activity that handles the
563`Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS`
564    intent but MAY implement it as a no-op.
565
566### 7.4.8\. Secure Elements
567
568If device implementations support [Open Mobile API](https://developer.android.com/reference/android/se/omapi/package-summary)
569capable secure elements and make them available to 3rd-party apps, they:
570
571*   [C-1-1] MUST enumerate the available Secure Elements readers when
572[`android.se.omapi.SEService.getReaders()`](https://developer.android.com/reference/android/se/omapi/SEService#getReaders%28%29)
573method is called.
574