Home | History | Annotate | Download | only in 7_hardware-compatibility
      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