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