1## 7.3\. Sensors 2 3If device implementations include a particular sensor type that has a 4corresponding API for third-party developers, the device implementation 5MUST implement that API as described in the Android SDK documentation and 6the Android Open Source documentation on [sensors]( 7http://source.android.com/devices/sensors/). 8 9Device implementations: 10 11* [C-0-1] MUST accurately report the presence or absence of sensors per the 12[`android.content.pm.PackageManager`]( 13http://developer.android.com/reference/android/content/pm/PackageManager.html) 14class. 15* [C-0-2] MUST return an accurate list of supported sensors via the 16`SensorManager.getSensorList()` and similar methods. 17* [C-0-3] MUST behave reasonably for all other sensor APIs (for example, by 18returning `true` or `false` as appropriate when applications attempt to register 19listeners, not calling sensor listeners when the corresponding sensors are not 20present; etc.). 21 22If device implementations include a particular sensor type that has a 23corresponding API for third-party developers, they: 24 25* [C-1-1] MUST [report all sensor measurements]( 26http://developer.android.com/reference/android/hardware/SensorEvent.html) 27using the relevant International System of Units (metric) values for each 28sensor type as defined in the Android SDK documentation. 29* [C-1-2] MUST report sensor data with a maximum latency of 100 milliseconds 30+ 2 * sample_time for the case of a sensor streamed with a minimum required 31latency of 5 ms + 2 * sample_time when the application processor is active. 32This delay does not include any filtering delays. 33* [C-1-3] MUST report the first sensor sample within 400 milliseconds + 2 * 34sample_time of the sensor being activated. It is acceptable for this sample to 35have an accuracy of 0. 36* [SR] SHOULD [report the event time]( 37http://developer.android.com/reference/android/hardware/SensorEvent.html#timestamp) 38in nanoseconds as defined in the Android SDK documentation, representing the 39time the event happened and synchronized with the 40SystemClock.elapsedRealtimeNano() clock. Existing and new Android devices are 41**STRONGLY RECOMMENDED** to meet these requirements so they will be able to 42upgrade to the future platform releases where this might become a REQUIRED 43component. The synchronization error SHOULD be below 100 milliseconds. 44 45* [C-1-4] For any API indicated by the Android SDK documentation to be a 46 [continuous sensor]( 47 https://source.android.com/devices/sensors/report-modes.html#continuous), 48 device implementations MUST continuously provide 49 periodic data samples that SHOULD have a jitter below 3%, 50 where jitter is defined as the standard deviation of the difference of the 51 reported timestamp values between consecutive events. 52 53* [C-1-5] MUST ensure that the sensor event stream 54 MUST NOT prevent the device CPU from entering a suspend state or waking up 55 from a suspend state. 56* When several sensors are activated, the power consumption SHOULD NOT exceed 57 the sum of the individual sensor’s reported power consumption. 58 59The list above is not comprehensive; the documented behavior of the Android SDK 60and the Android Open Source Documentations on 61[sensors](http://source.android.com/devices/sensors/) is to be considered 62authoritative. 63 64 65Some sensor types are composite, meaning they can be derived from data provided 66by one or more other sensors. (Examples include the orientation sensor and the 67linear acceleration sensor.) 68 69Device implementations: 70 71* SHOULD implement these sensor types, when they 72include the prerequisite physical sensors as described 73in [sensor types](https://source.android.com/devices/sensors/sensor-types.html). 74 75If device implementations include a composite sensor, they: 76 77* [C-2-1] MUST implement the sensor as described in the Android Open Source 78documentation on [composite sensors]( 79https://source.android.com/devices/sensors/sensor-types.html#composite_sensor_type_summary). 80 81 82### 7.3.1\. Accelerometer 83 84* Device implementations SHOULD include a 3-axis accelerometer. 85 86If device implementations include a 3-axis accelerometer, they: 87 88* [C-1-1] MUST be able to report events up to a frequency of at least 50 Hz. 89* [C-1-2] MUST implement and report [`TYPE_ACCELEROMETER`]( 90 http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_ACCELEROMETER) 91 sensor. 92* [C-1-3] MUST comply with the [Android sensor coordinate system]( 93http://developer.android.com/reference/android/hardware/SensorEvent.html) 94as detailed in the Android APIs. 95* [C-1-4] MUST be capable of measuring from freefall up to four times the 96gravity(4g) or more on any axis. 97* [C-1-5] MUST have a resolution of at least 12-bits. 98* [C-1-6] MUST have a standard deviation no greater than 0.05 m/s^, where 99the standard deviation should be calculated on a per axis basis on samples 100collected over a period of at least 3 seconds at the fastest sampling rate. 101* [SR] are **STRONGLY RECOMMENDED** to implement the `TYPE_SIGNIFICANT_MOTION` 102 composite sensor. 103* [SR] are STRONGLY RECOMMENDED to implement the 104 `TYPE_ACCELEROMETER_UNCALIBRATED` sensor if online accelerometer calibration 105 is available. 106* SHOULD implement the `TYPE_SIGNIFICANT_MOTION`, `TYPE_TILT_DETECTOR`, 107`TYPE_STEP_DETECTOR`, `TYPE_STEP_COUNTER` composite sensors as described 108in the Android SDK document. 109* SHOULD report events up to at least 200 Hz. 110* SHOULD have a resolution of at least 16-bits. 111* SHOULD be calibrated while in use if the characteristics changes over 112the life cycle and compensated, and preserve the compensation parameters 113between device reboots. 114* SHOULD be temperature compensated. 115* SHOULD also implement [`TYPE_ACCELEROMETER_UNCALIBRATED`]( 116https://developer.android.com/reference/android/hardware/Sensor.html#STRING_TYPE_ACCELEROMETER_UNCALIBRATED) 117 sensor. 118 119If device implementations include a 3-axis accelerometer and any of the 120`TYPE_SIGNIFICANT_MOTION`, `TYPE_TILT_DETECTOR`, `TYPE_STEP_DETECTOR`, 121`TYPE_STEP_COUNTER` composite sensors are implemented: 122 123* [C-2-1] The sum of their power consumption MUST always be less than 4 mW. 124* SHOULD each be below 2 mW and 0.5 mW for when the device is in a dynamic or 125 static condition. 126 127If device implementations include a 3-axis accelerometer and a gyroscope sensor, 128they: 129 130* [C-3-1] MUST implement the `TYPE_GRAVITY` and `TYPE_LINEAR_ACCELERATION` 131composite sensors. 132* SHOULD implement the `TYPE_GAME_ROTATION_VECTOR` composite sensor. 133* [SR] Existing and new Android devices are STRONGLY RECOMMENDED to 134implement the `TYPE_GAME_ROTATION_VECTOR` sensor. 135 136If device implementations include a 3-axis accelerometer, a gyroscope sensor 137and a magnetometer sensor, they: 138 139* [C-4-1] MUST implement a `TYPE_ROTATION_VECTOR` composite sensor. 140 141### 7.3.2\. Magnetometer 142 143* Device implementations SHOULD include a 3-axis magnetometer (compass). 144 145If device impelementations include a 3-axis magnetometer, they: 146 147* [C-1-1] MUST implement the `TYPE_MAGNETIC_FIELD` sensor. 148* [C-1-2] MUST be able to report events up to a frequency of at least 10 Hz 149and SHOULD report events up to at least 50 Hz. 150* [C-1-3] MUST comply with the [Android sensor coordinate system]( 151 http://developer.android.com/reference/android/hardware/SensorEvent.html) 152 as detailed in the 153 Android APIs. 154* [C-1-4] MUST be capable of measuring between -900 µT and +900 µT on each 155axis before saturating. 156* [C-1-5] MUST have a hard iron offset value less than 700 µT and SHOULD have 157a value below 200 µT, by placing the magnetometer far from 158dynamic (current-induced) and static (magnet-induced) magnetic fields. 159* [C-1-6] MUST have a resolution equal or denser than 0.6 µT. 160* [C-1-7] MUST support online calibration and compensation of the hard iron 161 bias, and preserve the compensation parameters between device reboots. 162* [C-1-8] MUST have the soft iron compensation applied—the calibration can be 163done either while in use or during the production of the device. 164* [C-1-9] MUST have a standard deviation, calculated on a per axis basis on 165samples collected over a period of at least 3 seconds at the fastest sampling 166rate, no greater than 1.5 µT; SHOULD have a standard deviation no greater than 1670.5 µT. 168* SHOULD implement `TYPE_MAGNETIC_FIELD_UNCALIBRATED` sensor. 169* [SR] Existing and new Android devices are STRONGLY RECOMMENDED to implement the 170 `TYPE_MAGNETIC_FIELD_UNCALIBRATED` sensor. 171 172 173If device impelementations include a 3-axis magnetometer, an accelerometer 174sensor and a gyroscope sensor, they: 175 176* [C-2-1] MUST implement a `TYPE_ROTATION_VECTOR` composite sensor. 177 178If device impelementations include a 3-axis magnetometer, an accelerometer, they: 179 180* MAY implement the `TYPE_GEOMAGNETIC_ROTATION_VECTOR` sensor. 181 182If device impelementations include a 3-axis magnetometer, an accelerometer and 183`TYPE_GEOMAGNETIC_ROTATION_VECTOR` sensor, they: 184 185* [C-3-1] MUST consume less than 10 mW. 186* SHOULD consume less than 3 mW when the sensor is registered for batch mode at 10 Hz. 187 188### 7.3.3\. GPS 189 190Device implementations: 191 192* SHOULD include a GPS/GNSS receiver. 193 194If device implementations include a GPS/GNSS receiver and report the capability 195to applications through the `android.hardware.location.gps` feature flag, they: 196 197* [C-1-1] MUST support location outputs at a rate of at least 1 Hz when 198requested via `LocationManager#requestLocationUpdate`. 199* [C-1-2] MUST be able to determine the location in open-sky conditions 200 (strong signals, negligible multipath, HDOP < 2) within 10 seconds (fast 201 time to first fix), when connected to a 0.5 Mbps or faster data speed 202 internet connection. This requirement is typically met by the use of some 203 form of Assisted or Predicted GPS/GNSS technique 204 to minimize GPS/GNSS lock-on time (Assistance data includes Reference Time, 205 Reference Location and Satellite Ephemeris/Clock). 206 * [SR] After making such a location calculation, it is 207 STRONGLY RECOMMENDED for the device to 208 be able to determine its location, in open sky, within 10 seconds, 209 when location requests are restarted, up to an hour after the initial 210 location calculation, even when the subsequent request is made without 211 a data connection, and/or after a power cycle. 212* In open sky conditions after determining the location, while stationary or 213 moving with less than 1 meter per second squared of acceleration: 214 215 * [C-1-3] MUST be able to determine location within 20 meters, and speed 216 within 0.5 meters per second, at least 95% of the time. 217 * [C-1-4] MUST simultaneously track and report via 218 [`GnssStatus.Callback`]( 219 https://developer.android.com/reference/android/location/GnssStatus.Callback.html#GnssStatus.Callback()') 220 at least 8 satellites from one constellation. 221 * SHOULD be able to simultaneously track at least 24 satellites, from 222 multiple constellations (e.g. GPS + at least one of Glonass, Beidou, 223 Galileo). 224* [C-1-5] MUST report the GNSS technology generation through the test API 225‘getGnssYearOfHardware’. 226* [SR] Continue to deliver normal GPS/GNSS location outputs during an 227emergency phone call. 228* [SR] Report GNSS measurements from all constellations tracked (as reported 229in GnssStatus messages), with the exception of SBAS. 230* [SR] Report AGC, and Frequency of GNSS measurement. 231* [SR] Report all accuracy estimates (including Bearing, Speed, and Vertical) 232as part of each GPS Location. 233* [SR] are STRONGLY RECOMMENDED to meet as many as possible from the 234additional mandatory requirements for devices reporting the year "2016" or 235"2017" through the Test API `LocationManager.getGnssYearOfHardware()`. 236 237If device implementations include a GPS/GNSS receiver and report the capability 238to applications through the `android.hardware.location.gps` feature flag and the 239`LocationManager.getGnssYearOfHardware()` Test API reports the year "2016" or 240newer, they: 241 242* [C-2-1] MUST report GPS measurements, as soon as they are found, even if a 243location calculated from GPS/GNSS is not yet reported. 244* [C-2-2] MUST report GPS pseudoranges and pseudorange rates, that, in 245open-sky conditions after determining the location, while stationary or moving 246with less than 0.2 meter per second squared of acceleration, are sufficient to 247calculate position within 20 meters, and speed within 0.2 meters per second, 248at least 95% of the time. 249 250If device implementations include a GPS/GNSS receiver and report the capability 251to applications through the `android.hardware.location.gps` feature flag and the 252`LocationManager.getGnssYearOfHardware()` Test API reports the year "2017" or 253newer, they: 254 255* [C-3-1] MUST continue to deliver normal GPS/GNSS location outputs during an 256emergency phone call. 257* [C-3-2] MUST report GNSS measurements from all constellations tracked (as 258reported in 259 GnssStatus messages), with the exception of SBAS. 260* [C-3-3] MUST report AGC, and Frequency of GNSS measurement. 261* [C-3-4] MUST report all accuracy estimates (including Bearing, Speed, and 262Vertical) as part of each GPS Location. 263 264 265### 7.3.4\. Gyroscope 266 267Device implementations: 268 269* SHOULD include a gyroscope (angular change sensor). 270* SHOULD NOT include a gyroscope sensor unless a 3-axis accelerometer is 271also included. 272 273If device implementations include a gyroscope, they: 274 275* [C-1-1] MUST be able to report events up to a frequency of at least 50 Hz. 276* [C-1-2] MUST implement the `TYPE_GYROSCOPE` sensor and SHOULD also implement 277`TYPE_GYROSCOPE_UNCALIBRATED` sensor. 278* [C-1-3] MUST be capable of measuring orientation changes up to 1,000 degrees 279per second. 280* [C-1-4] MUST have a resolution of 12-bits or more and SHOULD have a 281resolution of 16-bits or more. 282* [C-1-5] MUST be temperature compensated. 283* [C-1-6] MUST be calibrated and compensated while in use, and preserve the 284 compensation parameters between device reboots. 285* [C-1-7] MUST have a variance no greater than 1e-7 rad^2 / s^2 per Hz 286(variance per Hz, or rad^2 / s). The variance is allowed to vary with the 287sampling rate, but MUST be constrained by this value. In other words, if you 288measure the variance of the gyro at 1 Hz sampling rate it SHOULD be no greater 289than 1e-7 rad^2/s^2. 290* [SR] Existing and new Android devices are STRONGLY RECOMMENDED to 291implement the `SENSOR_TYPE_GYROSCOPE_UNCALIBRATED` sensor. 292* [SR] Calibration error is STRONGLY RECOMMENDED to be less than 0.01 rad/s 293when device is stationary at room temperature. 294* SHOULD report events up to at least 200 Hz. 295 296If device implementations include a gyroscope, an accelerometer sensor and a 297magnetometer sensor, they: 298 299* [C-2-1] MUST implement a `TYPE_ROTATION_VECTOR` composite sensor. 300 301If device implementations include a gyroscope and a accelerometer sensor, they: 302 303* [C-3-1] MUST implement the `TYPE_GRAVITY` and 304`TYPE_LINEAR_ACCELERATION` composite sensors. 305* [SR] Existing and new Android devices are STRONGLY RECOMMENDED to implement 306the `TYPE_GAME_ROTATION_VECTOR` sensor. 307* SHOULD implement the `TYPE_GAME_ROTATION_VECTOR` composite sensor. 308 309### 7.3.5\. Barometer 310 311* Device implementations SHOULD include a barometer (ambient air pressure 312sensor). 313 314If device implementations include a barometer, they: 315 316* [C-1-1] MUST implement and report `TYPE_PRESSURE` sensor. 317* [C-1-2] MUST be able to deliver events at 5 Hz or greater. 318* [C-1-3] MUST be temperature compensated. 319* [SR] STRONGLY RECOMMENDED to be able to report pressure measurements in the 320 range 300hPa to 1100hPa. 321* SHOULD have an absolute accuracy of 1hPa. 322* SHOULD have a relative accuracy of 0.12hPa over 20hPa range 323 (equivalent to ~1m accuracy over ~200m change at sea level). 324 325### 7.3.6\. Thermometer 326 327Device implementations: 328* MAY include an ambient thermometer (temperature sensor). 329* MAY but SHOULD NOT include a CPU temperature sensor. 330 331If device implementations include an ambient thermometer (temperature sensor), 332they: 333 334* [C-1-1] MUST be defined as `SENSOR_TYPE_AMBIENT_TEMPERATURE` and MUST 335 measure the ambient (room/vehicle cabin) temperature from where the user 336 is interacting with the device in degrees Celsius. 337* [C-1-2] MUST be defined as `SENSOR_TYPE_TEMPERATURE`. 338* [C-1-3] MUST measure the temperature of the device CPU. 339* [C-1-4] MUST NOT measure any other temperature. 340 341Note the `SENSOR_TYPE_TEMPERATURE` sensor type was deprecated in Android 4.0. 342 343### 7.3.7\. Photometer 344 345* Device implementations MAY include a photometer (ambient light sensor). 346 347### 7.3.8\. Proximity Sensor 348 349* Device implementations MAY include a proximity sensor. 350 351If device implementations include a proximity sensor, they: 352 353* [C-1-1] MUST measure the proximity of an object in the same direction as the 354 screen. That is, the proximity sensor MUST be oriented to detect objects 355 close to the screen, as the primary intent of this sensor type is to 356 detect a phone in use by the user. If device implementations include a 357 proximity sensor with any other orientation, it MUST NOT be accessible 358 through this API. 359* [C-1-2] MUST have 1-bit of accuracy or more. 360 361 362### 7.3.9\. High Fidelity Sensors 363 364If device implementations include a set of higher quality sensors as defined 365in this section, and make available them to third-party apps, they: 366 367* [C-1-1] MUST identify the capability through the 368`android.hardware.sensor.hifi_sensors` feature flag. 369 370If device implementations declare `android.hardware.sensor.hifi_sensors`, 371they: 372 373* [C-2-1] MUST have a `TYPE_ACCELEROMETER` sensor which: 374 * MUST have a measurement range between at least -8g and +8g. 375 * MUST have a measurement resolution of at least 1024 LSB/G. 376 * MUST have a minimum measurement frequency of 12.5 Hz or lower. 377 * MUST have a maximum measurement frequency of 400 Hz or higher. 378 * MUST have a measurement noise not above 400 uG/√Hz. 379 * MUST implement a non-wake-up form of this sensor with a buffering 380 capability of at least 3000 sensor events. 381 * MUST have a batching power consumption not worse than 3 mW. 382 * SHOULD have a stationary noise bias stability of \<15 μg √Hz from 24hr static 383 dataset. 384 * SHOULD have a bias change vs. temperature of ≤ +/- 1mg / °C. 385 * SHOULD have a best-fit line non-linearity of ≤ 0.5%, and sensitivity change vs. temperature of ≤ 386 0.03%/C°. 387 * SHOULD have white noise spectrum to ensure adequate qualification 388 of sensor’s noise integrity. 389 390* [C-2-2] MUST have a `TYPE_ACCELEROMETER_UNCALIBRATED` with the same 391quality requirements as `TYPE_ACCELEROMETER`. 392 393* [C-2-3] MUST have a `TYPE_GYROSCOPE` sensor which: 394 * MUST have a measurement range between at least -1000 and +1000 dps. 395 * MUST have a measurement resolution of at least 16 LSB/dps. 396 * MUST have a minimum measurement frequency of 12.5 Hz or lower. 397 * MUST have a maximum measurement frequency of 400 Hz or higher. 398 * MUST have a measurement noise not above 0.014°/s/√Hz. 399 * SHOULD have a stationary bias stability of < 0.0002 °/s √Hz from 24-hour static dataset. 400 * SHOULD have a bias change vs. temperature of ≤ +/- 0.05 °/ s / °C. 401 * SHOULD have a sensitivity change vs. temperature of ≤ 0.02% / °C. 402 * SHOULD have a best-fit line non-linearity of ≤ 0.2%. 403 * SHOULD have a noise density of ≤ 0.007 °/s/√Hz. 404 * SHOULD have white noise spectrum to ensure adequate qualification 405 of sensor’s noise integrity. 406 * SHOULD have calibration error less than 0.002 rad/s in 407 temperature range 10 ~ 40 ℃ when device is stationary. 408 409* [C-2-4] MUST have a `TYPE_GYROSCOPE_UNCALIBRATED` with the same quality 410requirements as `TYPE_GYROSCOPE`. 411* [C-2-5] MUST have a `TYPE_GEOMAGNETIC_FIELD` sensor which: 412 * MUST have a measurement range between at least -900 and +900 uT. 413 * MUST have a measurement resolution of at least 5 LSB/uT. 414 * MUST have a minimum measurement frequency of 5 Hz or lower. 415 * MUST have a maximum measurement frequency of 50 Hz or higher. 416 * MUST have a measurement noise not above 0.5 uT. 417* [C-2-6] MUST have a `TYPE_MAGNETIC_FIELD_UNCALIBRATED` with the same quality 418requirements as `TYPE_GEOMAGNETIC_FIELD` and in addition: 419 * MUST implement a non-wake-up form of this sensor with a buffering 420 capability of at least 600 sensor events. 421 * SHOULD have white noise spectrum to ensure adequate qualification 422 of sensor’s noise integrity. 423* [C-2-7] MUST have a `TYPE_PRESSURE` sensor which: 424 * MUST have a measurement range between at least 300 and 1100 hPa. 425 * MUST have a measurement resolution of at least 80 LSB/hPa. 426 * MUST have a minimum measurement frequency of 1 Hz or lower. 427 * MUST have a maximum measurement frequency of 10 Hz or higher. 428 * MUST have a measurement noise not above 2 Pa/√Hz. 429 * MUST implement a non-wake-up form of this sensor with a buffering 430 capability of at least 300 sensor events. 431 * MUST have a batching power consumption not worse than 2 mW. 432* [C-2-8] MUST have a `TYPE_GAME_ROTATION_VECTOR` sensor which: 433 * MUST implement a non-wake-up form of this sensor with a buffering 434 capability of at least 300 sensor events. 435 * MUST have a batching power consumption not worse than 4 mW. 436* [C-2-9] MUST have a `TYPE_SIGNIFICANT_MOTION` sensor which: 437 * MUST have a power consumption not worse than 0.5 mW when device is 438 static and 1.5 mW when device is moving. 439* [C-2-10] MUST have a `TYPE_STEP_DETECTOR` sensor which: 440 * MUST implement a non-wake-up form of this sensor with a buffering 441 capability of at least 100 sensor events. 442 * MUST have a power consumption not worse than 0.5 mW when device is 443 static and 1.5 mW when device is moving. 444 * MUST have a batching power consumption not worse than 4 mW. 445* [C-2-11] MUST have a `TYPE_STEP_COUNTER` sensor which: 446 * MUST have a power consumption not worse than 0.5 mW when device is 447 static and 1.5 mW when device is moving. 448* [C-2-12] MUST have a `TILT_DETECTOR` sensor which: 449 * MUST have a power consumption not worse than 0.5 mW when device is 450 static and 1.5 mW when device is moving. 451* [C-2-13] The event timestamp of the same physical event reported by the 452Accelerometer, Gyroscope sensor and Magnetometer MUST be within 2.5 453milliseconds of each other. 454* [C-2-14] MUST have Gyroscope sensor event timestamps on the same time 455base as the camera subsystem and within 1 milliseconds of error. 456* [C-2-15] MUST deliver samples to applications within 5 milliseconds from 457the time when the data is available on any of the above physical sensors 458to the application. 459* [C-2-16] MUST not have a power consumption higher than 0.5 mW 460when device is static and 2.0 mW when device is moving 461when any combination of the following sensors are enabled: 462 * `SENSOR_TYPE_SIGNIFICANT_MOTION` 463 * `SENSOR_TYPE_STEP_DETECTOR` 464 * `SENSOR_TYPE_STEP_COUNTER` 465 * `SENSOR_TILT_DETECTORS` 466* [C-2-17] MAY have a `TYPE_PROXIMITY` sensor, but if present MUST have 467a minimum buffer capability of 100 sensor events. 468 469Note that all power consumption requirements in this section do not include the 470power consumption of the Application Processor. It is inclusive of the power 471drawn by the entire sensor chain—the sensor, any supporting circuitry, any 472dedicated sensor processing system, etc. 473 474If device implementations include direct sensor support, they: 475 476* [C-3-1] MUST correctly declare support of direct channel types and direct 477 report rates level through the [`isDirectChannelTypeSupported`]( 478 https://developer.android.com/reference/android/hardware/Sensor.html#isDirectChannelTypeSupported%28int%29) 479 and [`getHighestDirectReportRateLevel`]( 480 https://developer.android.com/reference/android/hardware/Sensor.html#getHighestDirectReportRateLevel%28%29) 481 API. 482* [C-3-2] MUST support at least one of the two sensor direct channel types 483 for all sensors that declare support for sensor direct channel 484 * [`TYPE_HARDWARE_BUFFER`](https://developer.android.com/reference/android/hardware/SensorDirectChannel.html#TYPE_HARDWARE_BUFFER) 485 * [`TYPE_MEMORY_FILE`](https://developer.android.com/reference/android/hardware/SensorDirectChannel.html#TYPE_MEMORY_FILE) 486* SHOULD support event reporting through sensor direct channel for primary 487 sensor (non-wakeup variant) of the following types: 488 * `TYPE_ACCELEROMETER` 489 * `TYPE_ACCELEROMETER_UNCALIBRATED` 490 * `TYPE_GYROSCOPE` 491 * `TYPE_GYROSCOPE_UNCALIBRATED` 492 * `TYPE_MAGNETIC_FIELD` 493 * `TYPE_MAGNETIC_FIELD_UNCALIBRATED` 494 495### 7.3.10\. Fingerprint Sensor 496 497If device implementations include a secure lock screen, they: 498 499* SHOULD include a fingerprint sensor. 500 501If device implementations include a fingerprint sensor and make the sensor 502available to third-party apps, they: 503 504* [C-1-1] MUST declare support for the `android.hardware.fingerprint` feature. 505* [C-1-2] MUST fully implement the 506[corresponding API]( 507https://developer.android.com/reference/android/hardware/fingerprint/package-summary.html) 508as described in the Android SDK documentation. 509* [C-1-3] MUST have a false acceptance rate not higher than 0.002%. 510* [SR] Are STRONGLY RECOMMENDED to have a spoof and imposter acceptance rate 511not higher than 7%. 512* [C-1-4] MUST disclose that this mode may be less secure than a strong PIN, 513pattern, or password and clearly enumerate the risks of enabling it, if the 514spoof and imposter acceptance rates are higher than 7%. 515* [C-1-5] MUST rate limit attempts for at least 30 seconds after five false 516trials for fingerprint verification. 517* [C-1-6] MUST have a hardware-backed keystore implementation, and perform the 518fingerprint matching in a Trusted Execution Environment (TEE) or on a chip with 519a secure channel to the TEE. 520* [C-1-7] MUST have all identifiable fingerprint data encrypted and 521cryptographically authenticated such that they cannot be acquired, read or 522altered outside of the Trusted Execution Environment (TEE) as documented in the 523[implementation guidelines]( 524https://source.android.com/devices/tech/security/authentication/fingerprint-hal.html) 525on the Android Open Source Project site. 526* [C-1-8] MUST prevent adding a fingerprint without first establishing a chain 527of trust by having the user confirm existing or add a new device credential 528(PIN/pattern/password) that's secured by TEE; the Android Open Source Project 529 implementation provides the mechanism in the framework to do so. 530* [C-1-9] MUST NOT enable 3rd-party applications to distinguish between 531individual fingerprints. 532* [C-1-10] MUST honor the DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT 533flag. 534* [C-1-11] MUST, when upgraded from a version earlier than Android 6.0, have 535the fingerprint data securely migrated to meet the above requirements or 536removed. 537* [SR] Are STRONGLY RECOMMENDED to have a false rejection rate of less than 10%, 538as measured on the device. 539* [SR] Are STRONGLY RECOMMENDED to have a latency below 1 second, measured from 540when the fingerprint sensor is touched until the screen is unlocked, for one 541enrolled finger. 542* SHOULD use the Android Fingerprint icon provided in the Android Open Source 543Project. 544 545### 7.3.11\. Android Automotive-only sensors 546 547Automotive-specific sensors are defined in the 548`android.car.CarSensorManager API`. 549 550#### 7.3.11.1\. Current Gear 551 552See [Section 2.5.1](#2_5_1_hardware) for device-specific requirements. 553 554#### 7.3.11.2\. Day Night Mode 555 556See [Section 2.5.1](#2_5_1_hardware) for device-specific requirements. 557 558#### 7.3.11.3\. Driving Status 559 560See [Section 2.5.1](#2_5_1_hardware) for device-specific requirements. 561 562#### 7.3.11.4\. Wheel Speed 563 564See [Section 2.5.1](#2_5_1_hardware) for device-specific requirements. 565 566 567## 7.3.12\. Pose Sensor 568 569Device implementations: 570 571* MAY support pose sensor with 6 degrees of freedom. 572 573If device implementations support pose sensor with 6 degrees of freedom, they: 574 575* [C-1-1] MUST implement and report [`TYPE_POSE_6DOF`]( 576https://developer.android.com/reference/android/hardware/Sensor.html#TYPE_POSE_6DOF) 577sensor. 578* [C-1-2] MUST be more accurate than the rotation vector alone. 579