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