1 ## 7.3\. Sensors 2 3 If device implementations include a particular sensor type that has a 4 corresponding API for third-party developers, the device implementation 5 MUST implement that API as described in the Android SDK documentation and 6 the Android Open Source documentation on [sensors]( 7 http://source.android.com/devices/sensors/). 8 9 Device implementations: 10 11 * [C-0-1] MUST accurately report the presence or absence of sensors per the 12 [`android.content.pm.PackageManager`]( 13 http://developer.android.com/reference/android/content/pm/PackageManager.html) 14 class. 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 18 returning `true` or `false` as appropriate when applications attempt to register 19 listeners, not calling sensor listeners when the corresponding sensors are not 20 present; etc.). 21 22 If device implementations include a particular sensor type that has a 23 corresponding API for third-party developers, they: 24 25 * [C-1-1] MUST [report all sensor measurements]( 26 http://developer.android.com/reference/android/hardware/SensorEvent.html) 27 using the relevant International System of Units (metric) values for each 28 sensor 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 31 latency of 5 ms + 2 * sample_time when the application processor is active. 32 This delay does not include any filtering delays. 33 * [C-1-3] MUST report the first sensor sample within 400 milliseconds + 2 * 34 sample_time of the sensor being activated. It is acceptable for this sample to 35 have an accuracy of 0. 36 * [SR] SHOULD [report the event time]( 37 http://developer.android.com/reference/android/hardware/SensorEvent.html#timestamp) 38 in nanoseconds as defined in the Android SDK documentation, representing the 39 time the event happened and synchronized with the 40 SystemClock.elapsedRealtimeNano() clock. Existing and new Android devices are 41 **STRONGLY RECOMMENDED** to meet these requirements so they will be able to 42 upgrade to the future platform releases where this might become a REQUIRED 43 component. 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 sensors reported power consumption. 58 59 The list above is not comprehensive; the documented behavior of the Android SDK 60 and the Android Open Source Documentations on 61 [sensors](http://source.android.com/devices/sensors/) is to be considered 62 authoritative. 63 64 65 Some sensor types are composite, meaning they can be derived from data provided 66 by one or more other sensors. (Examples include the orientation sensor and the 67 linear acceleration sensor.) 68 69 Device implementations: 70 71 * SHOULD implement these sensor types, when they 72 include the prerequisite physical sensors as described 73 in [sensor types](https://source.android.com/devices/sensors/sensor-types.html). 74 75 If device implementations include a composite sensor, they: 76 77 * [C-2-1] MUST implement the sensor as described in the Android Open Source 78 documentation on [composite sensors]( 79 https://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 86 If 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]( 93 http://developer.android.com/reference/android/hardware/SensorEvent.html) 94 as detailed in the Android APIs. 95 * [C-1-4] MUST be capable of measuring from freefall up to four times the 96 gravity(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 99 the standard deviation should be calculated on a per axis basis on samples 100 collected 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 108 in 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 112 the life cycle and compensated, and preserve the compensation parameters 113 between device reboots. 114 * SHOULD be temperature compensated. 115 * SHOULD also implement [`TYPE_ACCELEROMETER_UNCALIBRATED`]( 116 https://developer.android.com/reference/android/hardware/Sensor.html#STRING_TYPE_ACCELEROMETER_UNCALIBRATED) 117 sensor. 118 119 If 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 127 If device implementations include a 3-axis accelerometer and a gyroscope sensor, 128 they: 129 130 * [C-3-1] MUST implement the `TYPE_GRAVITY` and `TYPE_LINEAR_ACCELERATION` 131 composite sensors. 132 * SHOULD implement the `TYPE_GAME_ROTATION_VECTOR` composite sensor. 133 * [SR] Existing and new Android devices are STRONGLY RECOMMENDED to 134 implement the `TYPE_GAME_ROTATION_VECTOR` sensor. 135 136 If device implementations include a 3-axis accelerometer, a gyroscope sensor 137 and 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 145 If 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 149 and 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 155 axis before saturating. 156 * [C-1-5] MUST have a hard iron offset value less than 700 T and SHOULD have 157 a value below 200 T, by placing the magnetometer far from 158 dynamic (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 appliedthe calibration can be 163 done 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 165 samples collected over a period of at least 3 seconds at the fastest sampling 166 rate, no greater than 1.5 T; SHOULD have a standard deviation no greater than 167 0.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 173 If device impelementations include a 3-axis magnetometer, an accelerometer 174 sensor and a gyroscope sensor, they: 175 176 * [C-2-1] MUST implement a `TYPE_ROTATION_VECTOR` composite sensor. 177 178 If device impelementations include a 3-axis magnetometer, an accelerometer, they: 179 180 * MAY implement the `TYPE_GEOMAGNETIC_ROTATION_VECTOR` sensor. 181 182 If 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 190 Device implementations: 191 192 * SHOULD include a GPS/GNSS receiver. 193 194 If device implementations include a GPS/GNSS receiver and report the capability 195 to 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 198 requested 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 227 emergency phone call. 228 * [SR] Report GNSS measurements from all constellations tracked (as reported 229 in 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) 232 as part of each GPS Location. 233 * [SR] are STRONGLY RECOMMENDED to meet as many as possible from the 234 additional mandatory requirements for devices reporting the year "2016" or 235 "2017" through the Test API `LocationManager.getGnssYearOfHardware()`. 236 237 If device implementations include a GPS/GNSS receiver and report the capability 238 to applications through the `android.hardware.location.gps` feature flag and the 239 `LocationManager.getGnssYearOfHardware()` Test API reports the year "2016" or 240 newer, they: 241 242 * [C-2-1] MUST report GPS measurements, as soon as they are found, even if a 243 location calculated from GPS/GNSS is not yet reported. 244 * [C-2-2] MUST report GPS pseudoranges and pseudorange rates, that, in 245 open-sky conditions after determining the location, while stationary or moving 246 with less than 0.2 meter per second squared of acceleration, are sufficient to 247 calculate position within 20 meters, and speed within 0.2 meters per second, 248 at least 95% of the time. 249 250 If device implementations include a GPS/GNSS receiver and report the capability 251 to applications through the `android.hardware.location.gps` feature flag and the 252 `LocationManager.getGnssYearOfHardware()` Test API reports the year "2017" or 253 newer, they: 254 255 * [C-3-1] MUST continue to deliver normal GPS/GNSS location outputs during an 256 emergency phone call. 257 * [C-3-2] MUST report GNSS measurements from all constellations tracked (as 258 reported 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 262 Vertical) as part of each GPS Location. 263 264 265 ### 7.3.4\. Gyroscope 266 267 Device implementations: 268 269 * SHOULD include a gyroscope (angular change sensor). 270 * SHOULD NOT include a gyroscope sensor unless a 3-axis accelerometer is 271 also included. 272 273 If 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 279 per second. 280 * [C-1-4] MUST have a resolution of 12-bits or more and SHOULD have a 281 resolution 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 287 sampling rate, but MUST be constrained by this value. In other words, if you 288 measure the variance of the gyro at 1 Hz sampling rate it SHOULD be no greater 289 than 1e-7 rad^2/s^2. 290 * [SR] Existing and new Android devices are STRONGLY RECOMMENDED to 291 implement the `SENSOR_TYPE_GYROSCOPE_UNCALIBRATED` sensor. 292 * [SR] Calibration error is STRONGLY RECOMMENDED to be less than 0.01 rad/s 293 when device is stationary at room temperature. 294 * SHOULD report events up to at least 200 Hz. 295 296 If device implementations include a gyroscope, an accelerometer sensor and a 297 magnetometer sensor, they: 298 299 * [C-2-1] MUST implement a `TYPE_ROTATION_VECTOR` composite sensor. 300 301 If 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 306 the `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 312 sensor). 313 314 If 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 327 Device implementations: 328 * MAY include an ambient thermometer (temperature sensor). 329 * MAY but SHOULD NOT include a CPU temperature sensor. 330 331 If device implementations include an ambient thermometer (temperature sensor), 332 they: 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 341 Note 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 351 If 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 364 If device implementations include a set of higher quality sensors as defined 365 in 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 370 If device implementations declare `android.hardware.sensor.hifi_sensors`, 371 they: 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 sensors noise integrity. 389 390 * [C-2-2] MUST have a `TYPE_ACCELEROMETER_UNCALIBRATED` with the same 391 quality 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 sensors 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 410 requirements 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 418 requirements 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 sensors 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 452 Accelerometer, Gyroscope sensor and Magnetometer MUST be within 2.5 453 milliseconds of each other. 454 * [C-2-14] MUST have Gyroscope sensor event timestamps on the same time 455 base as the camera subsystem and within 1 milliseconds of error. 456 * [C-2-15] MUST deliver samples to applications within 5 milliseconds from 457 the time when the data is available on any of the above physical sensors 458 to the application. 459 * [C-2-16] MUST not have a power consumption higher than 0.5 mW 460 when device is static and 2.0 mW when device is moving 461 when 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 467 a minimum buffer capability of 100 sensor events. 468 469 Note that all power consumption requirements in this section do not include the 470 power consumption of the Application Processor. It is inclusive of the power 471 drawn by the entire sensor chainthe sensor, any supporting circuitry, any 472 dedicated sensor processing system, etc. 473 474 If 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 497 If device implementations include a secure lock screen, they: 498 499 * SHOULD include a fingerprint sensor. 500 501 If device implementations include a fingerprint sensor and make the sensor 502 available 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]( 507 https://developer.android.com/reference/android/hardware/fingerprint/package-summary.html) 508 as 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 511 not higher than 7%. 512 * [C-1-4] MUST disclose that this mode may be less secure than a strong PIN, 513 pattern, or password and clearly enumerate the risks of enabling it, if the 514 spoof and imposter acceptance rates are higher than 7%. 515 * [C-1-5] MUST rate limit attempts for at least 30 seconds after five false 516 trials for fingerprint verification. 517 * [C-1-6] MUST have a hardware-backed keystore implementation, and perform the 518 fingerprint matching in a Trusted Execution Environment (TEE) or on a chip with 519 a secure channel to the TEE. 520 * [C-1-7] MUST have all identifiable fingerprint data encrypted and 521 cryptographically authenticated such that they cannot be acquired, read or 522 altered outside of the Trusted Execution Environment (TEE) as documented in the 523 [implementation guidelines]( 524 https://source.android.com/devices/tech/security/authentication/fingerprint-hal.html) 525 on the Android Open Source Project site. 526 * [C-1-8] MUST prevent adding a fingerprint without first establishing a chain 527 of 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 531 individual fingerprints. 532 * [C-1-10] MUST honor the DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT 533 flag. 534 * [C-1-11] MUST, when upgraded from a version earlier than Android 6.0, have 535 the fingerprint data securely migrated to meet the above requirements or 536 removed. 537 * [SR] Are STRONGLY RECOMMENDED to have a false rejection rate of less than 10%, 538 as measured on the device. 539 * [SR] Are STRONGLY RECOMMENDED to have a latency below 1 second, measured from 540 when the fingerprint sensor is touched until the screen is unlocked, for one 541 enrolled finger. 542 * SHOULD use the Android Fingerprint icon provided in the Android Open Source 543 Project. 544 545 ### 7.3.11\. Android Automotive-only sensors 546 547 Automotive-specific sensors are defined in the 548 `android.car.CarSensorManager API`. 549 550 #### 7.3.11.1\. Current Gear 551 552 See [Section 2.5.1](#2_5_1_hardware) for device-specific requirements. 553 554 #### 7.3.11.2\. Day Night Mode 555 556 See [Section 2.5.1](#2_5_1_hardware) for device-specific requirements. 557 558 #### 7.3.11.3\. Driving Status 559 560 See [Section 2.5.1](#2_5_1_hardware) for device-specific requirements. 561 562 #### 7.3.11.4\. Wheel Speed 563 564 See [Section 2.5.1](#2_5_1_hardware) for device-specific requirements. 565 566 567 ## 7.3.12\. Pose Sensor 568 569 Device implementations: 570 571 * MAY support pose sensor with 6 degrees of freedom. 572 573 If device implementations support pose sensor with 6 degrees of freedom, they: 574 575 * [C-1-1] MUST implement and report [`TYPE_POSE_6DOF`]( 576 https://developer.android.com/reference/android/hardware/Sensor.html#TYPE_POSE_6DOF) 577 sensor. 578 * [C-1-2] MUST be more accurate than the rotation vector alone. 579