普通文本  |  579行  |  27.69 KB

## 7.3\. Sensors

If device implementations include a particular sensor type that has a
corresponding API for third-party developers, the device implementation
MUST implement that API as described in the Android SDK documentation and
the Android Open Source documentation on [sensors](
http://source.android.com/devices/sensors/).

Device implementations:

*   [C-0-1] MUST accurately report the presence or absence of sensors per the
[`android.content.pm.PackageManager`](
http://developer.android.com/reference/android/content/pm/PackageManager.html)
class.
*   [C-0-2] MUST return an accurate list of supported sensors via the
`SensorManager.getSensorList()` and similar methods.
*   [C-0-3] MUST behave reasonably for all other sensor APIs (for example, by
returning `true` or `false` as appropriate when applications attempt to register
listeners, not calling sensor listeners when the corresponding sensors are not
present; etc.).

If device implementations include a particular sensor type that has a
corresponding API for third-party developers, they:

*   [C-1-1] MUST [report all sensor measurements](
http://developer.android.com/reference/android/hardware/SensorEvent.html)
using the relevant International System of Units (metric) values for each
sensor type as defined in the Android SDK documentation.
*   [C-1-2] MUST report sensor data with a maximum latency of 100 milliseconds
+ 2 * sample_time for the case of a sensor streamed with a minimum required
latency of 5 ms + 2 * sample_time when the application processor is active.
This delay does not include any filtering delays.
*   [C-1-3] MUST report the first sensor sample within 400 milliseconds + 2 *
sample_time of the sensor being activated. It is acceptable for this sample to
have an accuracy of 0.
*   [SR] SHOULD [report the event time](
http://developer.android.com/reference/android/hardware/SensorEvent.html#timestamp)
in nanoseconds as defined in the Android SDK documentation, representing the
time the event happened and synchronized with the
SystemClock.elapsedRealtimeNano() clock. Existing and new Android devices are
**STRONGLY RECOMMENDED** to meet these requirements so they will be able to
upgrade to the future platform releases where this might become a REQUIRED
component. The synchronization error SHOULD be below 100 milliseconds.

*   [C-1-4] For any API indicated by the Android SDK documentation to be a
     [continuous sensor](
     https://source.android.com/devices/sensors/report-modes.html#continuous),
     device implementations MUST continuously provide
     periodic data samples that SHOULD have a jitter below 3%,
     where jitter is defined as the standard deviation of the difference of the
     reported timestamp values between consecutive events.

*   [C-1-5] MUST ensure that the sensor event stream
     MUST NOT prevent the device CPU from entering a suspend state or waking up
     from a suspend state.
*   When several sensors are activated, the power consumption SHOULD NOT exceed
     the sum of the individual sensor’s reported power consumption.

The list above is not comprehensive; the documented behavior of the Android SDK
and the Android Open Source Documentations on
[sensors](http://source.android.com/devices/sensors/) is to be considered
authoritative.


Some sensor types are composite, meaning they can be derived from data provided
by one or more other sensors. (Examples include the orientation sensor and the
linear acceleration sensor.)

Device implementations:

*   SHOULD implement these sensor types, when they
include the prerequisite physical sensors as described
in [sensor types](https://source.android.com/devices/sensors/sensor-types.html).

If device implementations include a composite sensor, they:

*    [C-2-1] MUST implement the sensor as described in the Android Open Source
documentation on [composite sensors](
https://source.android.com/devices/sensors/sensor-types.html#composite_sensor_type_summary).


### 7.3.1\. Accelerometer

*   Device implementations SHOULD include a 3-axis accelerometer.

If device implementations include a 3-axis accelerometer, they:

*   [C-1-1] MUST be able to report events up to a frequency of at least 50 Hz.
*   [C-1-2] MUST implement and report [`TYPE_ACCELEROMETER`](
    http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_ACCELEROMETER)
    sensor.
*   [C-1-3] MUST comply with the [Android sensor coordinate system](
http://developer.android.com/reference/android/hardware/SensorEvent.html)
as detailed in the Android APIs.
*   [C-1-4] MUST be capable of measuring from freefall up to four times the
gravity(4g) or more on any axis.
*   [C-1-5] MUST have a resolution of at least 12-bits.
*   [C-1-6] MUST have a standard deviation no greater than 0.05 m/s^, where
the standard deviation should be calculated on a per axis basis on samples
collected over a period of at least 3 seconds at the fastest sampling rate.
*   [SR] are **STRONGLY RECOMMENDED** to implement the `TYPE_SIGNIFICANT_MOTION`
    composite sensor.
*   [SR] are STRONGLY RECOMMENDED to implement the
    `TYPE_ACCELEROMETER_UNCALIBRATED` sensor if online accelerometer calibration
    is available.
*   SHOULD implement the `TYPE_SIGNIFICANT_MOTION`, `TYPE_TILT_DETECTOR`,
`TYPE_STEP_DETECTOR`, `TYPE_STEP_COUNTER` composite sensors as described
in the Android SDK document.
*   SHOULD report events up to at least 200 Hz.
*   SHOULD have a resolution of at least 16-bits.
*   SHOULD be calibrated while in use if the characteristics changes over
the life cycle and compensated, and preserve the compensation parameters
between device reboots.
*   SHOULD be temperature compensated.
*   SHOULD also implement [`TYPE_ACCELEROMETER_UNCALIBRATED`](
https://developer.android.com/reference/android/hardware/Sensor.html#STRING_TYPE_ACCELEROMETER_UNCALIBRATED)
    sensor.

If device implementations include a 3-axis accelerometer and any of the
`TYPE_SIGNIFICANT_MOTION`, `TYPE_TILT_DETECTOR`, `TYPE_STEP_DETECTOR`,
`TYPE_STEP_COUNTER` composite sensors are implemented:

*   [C-2-1] The sum of their power consumption MUST always be less than 4 mW.
*   SHOULD each be below 2 mW and 0.5 mW for when the device is in a dynamic or
    static condition.

If device implementations include a 3-axis accelerometer and a gyroscope sensor,
they:

*   [C-3-1] MUST implement the `TYPE_GRAVITY` and `TYPE_LINEAR_ACCELERATION`
composite sensors.
*   SHOULD implement the `TYPE_GAME_ROTATION_VECTOR` composite sensor.
*   [SR] Existing and new Android devices are STRONGLY RECOMMENDED to
implement the `TYPE_GAME_ROTATION_VECTOR` sensor.

If device implementations include a 3-axis accelerometer, a gyroscope sensor
and a magnetometer sensor, they:

*   [C-4-1] MUST implement a `TYPE_ROTATION_VECTOR` composite sensor.

### 7.3.2\. Magnetometer

*   Device implementations SHOULD include a 3-axis magnetometer (compass).

If device impelementations include a 3-axis magnetometer, they:

*   [C-1-1] MUST implement the `TYPE_MAGNETIC_FIELD` sensor.
*   [C-1-2] MUST be able to report events up to a frequency of at least 10 Hz
and SHOULD report events up to at least 50 Hz.
*   [C-1-3] MUST comply with the [Android sensor coordinate system](
    http://developer.android.com/reference/android/hardware/SensorEvent.html)
    as detailed in the
    Android APIs.
*   [C-1-4] MUST be capable of measuring between -900 µT and +900 µT on each
axis before saturating.
*   [C-1-5] MUST have a hard iron offset value less than 700 µT and SHOULD have
a value below 200 µT, by placing the magnetometer far from
dynamic (current-induced) and static (magnet-induced) magnetic fields.
*   [C-1-6] MUST have a resolution equal or denser than 0.6 µT.
*   [C-1-7] MUST support online calibration and compensation of the hard iron
    bias, and preserve the compensation parameters between device reboots.
*   [C-1-8] MUST have the soft iron compensation applied—the calibration can be
done either while in use or during the production of the device.
*   [C-1-9] MUST have a standard deviation, calculated on a per axis basis on
samples collected over a period of at least 3 seconds at the fastest sampling
rate, no greater than 1.5 µT; SHOULD have a standard deviation no greater than
0.5 µT.
*   SHOULD implement `TYPE_MAGNETIC_FIELD_UNCALIBRATED` sensor.
*   [SR] Existing and new Android devices are STRONGLY RECOMMENDED to implement the
    `TYPE_MAGNETIC_FIELD_UNCALIBRATED` sensor.


If device impelementations include a 3-axis magnetometer, an accelerometer
sensor and a gyroscope sensor, they:

*   [C-2-1] MUST implement a `TYPE_ROTATION_VECTOR` composite sensor.

If device impelementations include a 3-axis magnetometer, an accelerometer, they:

*   MAY implement the `TYPE_GEOMAGNETIC_ROTATION_VECTOR` sensor.

If device impelementations include a 3-axis magnetometer, an accelerometer and
`TYPE_GEOMAGNETIC_ROTATION_VECTOR` sensor, they:

*   [C-3-1] MUST consume less than 10 mW.
*   SHOULD consume less than 3 mW when the sensor is registered for batch mode at 10 Hz.

### 7.3.3\. GPS

Device implementations:

*   SHOULD include a GPS/GNSS receiver.

If device implementations include a GPS/GNSS receiver and report the capability
to applications through the `android.hardware.location.gps` feature flag, they:

*   [C-1-1] MUST support location outputs at a rate of at least 1 Hz when
requested via `LocationManager#requestLocationUpdate`.
*   [C-1-2] MUST be able to determine the location in open-sky conditions
    (strong signals, negligible multipath, HDOP < 2) within 10 seconds (fast
    time to first fix), when connected to a 0.5 Mbps or faster data speed
    internet connection. This requirement is typically met by the use of some
    form of Assisted or Predicted GPS/GNSS technique
    to minimize GPS/GNSS lock-on time (Assistance data includes Reference Time,
    Reference Location and Satellite Ephemeris/Clock).
       * [SR] After making such a location calculation, it is
         STRONGLY RECOMMENDED for the device to
         be able to determine its location, in open sky, within 10 seconds,
         when location requests are restarted, up to an hour after the initial
         location calculation, even when the subsequent request is made without
         a data connection, and/or after a power cycle.
*   In open sky conditions after determining the location, while stationary or
    moving with less than 1 meter per second squared of acceleration:

       * [C-1-3] MUST be able to determine location within 20 meters, and speed
         within 0.5 meters per second, at least 95% of the time.
       * [C-1-4] MUST simultaneously track and report via
       [`GnssStatus.Callback`](
       https://developer.android.com/reference/android/location/GnssStatus.Callback.html#GnssStatus.Callback()')
         at least 8 satellites from one constellation.
       * SHOULD be able to simultaneously track at least 24 satellites, from
       multiple constellations (e.g. GPS + at least one of Glonass, Beidou,
       Galileo).
*   [C-1-5] MUST report the GNSS technology generation through the test API
‘getGnssYearOfHardware’.
*    [SR] Continue to deliver normal GPS/GNSS location outputs during an
emergency phone call.
*    [SR] Report GNSS measurements from all constellations tracked (as reported
in GnssStatus messages), with the exception of SBAS.
*    [SR] Report AGC, and Frequency of GNSS measurement.
*    [SR] Report all accuracy estimates (including Bearing, Speed, and Vertical)
as part of each GPS Location.
*    [SR] are STRONGLY RECOMMENDED to meet as many as possible from the
additional mandatory requirements for devices reporting the year "2016" or
"2017" through the Test API `LocationManager.getGnssYearOfHardware()`.

If device implementations include a GPS/GNSS receiver and report the capability
to applications through the `android.hardware.location.gps` feature flag and the
`LocationManager.getGnssYearOfHardware()` Test API reports the year "2016" or
newer, they:

*    [C-2-1] MUST report GPS measurements, as soon as they are found, even if a
location calculated from GPS/GNSS is not yet reported.
*    [C-2-2] MUST report GPS pseudoranges and pseudorange rates, that, in
open-sky conditions after determining the location, while stationary or moving
with less than 0.2 meter per second squared of acceleration, are sufficient to
calculate position within 20 meters, and speed within 0.2 meters per second,
at least 95% of the time.

If device implementations include a GPS/GNSS receiver and report the capability
to applications through the `android.hardware.location.gps` feature flag and the
`LocationManager.getGnssYearOfHardware()` Test API reports the year "2017" or
newer, they:

*    [C-3-1] MUST continue to deliver normal GPS/GNSS location outputs during an
emergency phone call.
*    [C-3-2] MUST report GNSS measurements from all constellations tracked (as
reported in
     GnssStatus messages), with the exception of SBAS.
*    [C-3-3] MUST report AGC, and Frequency of GNSS measurement.
*    [C-3-4] MUST report all accuracy estimates (including Bearing, Speed, and
Vertical) as part of each GPS Location.


### 7.3.4\. Gyroscope

Device implementations:

*    SHOULD include a gyroscope (angular change sensor).
*    SHOULD NOT include a gyroscope sensor unless a 3-axis accelerometer is
also included.

If device implementations include a gyroscope, they:

*   [C-1-1] MUST be able to report events up to a frequency of at least 50 Hz.
*   [C-1-2] MUST implement the `TYPE_GYROSCOPE` sensor and SHOULD also implement
`TYPE_GYROSCOPE_UNCALIBRATED` sensor.
*   [C-1-3] MUST be capable of measuring orientation changes up to 1,000 degrees
per second.
*   [C-1-4] MUST have a resolution of 12-bits or more and SHOULD have a
resolution of 16-bits or more.
*   [C-1-5] MUST be temperature compensated.
*   [C-1-6] MUST be calibrated and compensated while in use, and preserve the
    compensation parameters between device reboots.
*   [C-1-7] MUST have a variance no greater than 1e-7 rad^2 / s^2 per Hz
(variance per Hz, or rad^2 / s). The variance is allowed to vary with the
sampling rate, but MUST be constrained by this value. In other words, if you
measure the variance of the gyro at 1 Hz sampling rate it SHOULD be no greater
than 1e-7 rad^2/s^2.
*   [SR] Existing and new Android devices are STRONGLY RECOMMENDED to
implement the `SENSOR_TYPE_GYROSCOPE_UNCALIBRATED` sensor.
*   [SR] Calibration error is STRONGLY RECOMMENDED to be less than 0.01 rad/s
when device is stationary at room temperature.
*   SHOULD report events up to at least 200 Hz.

If device implementations include a gyroscope, an accelerometer sensor and a
magnetometer sensor, they:

*   [C-2-1] MUST implement a `TYPE_ROTATION_VECTOR` composite sensor.

If device implementations include a gyroscope and a accelerometer sensor, they:

*   [C-3-1] MUST implement the `TYPE_GRAVITY` and
`TYPE_LINEAR_ACCELERATION` composite sensors.
*   [SR] Existing and new Android devices are STRONGLY RECOMMENDED to implement
the `TYPE_GAME_ROTATION_VECTOR` sensor.
*   SHOULD implement the `TYPE_GAME_ROTATION_VECTOR` composite sensor.

### 7.3.5\. Barometer

*    Device implementations SHOULD include a barometer (ambient air pressure
sensor).

If device implementations include a barometer, they:

*   [C-1-1] MUST implement and report `TYPE_PRESSURE` sensor.
*   [C-1-2] MUST be able to deliver events at 5 Hz or greater.
*   [C-1-3] MUST be temperature compensated.
*   [SR] STRONGLY RECOMMENDED to be able to report pressure measurements in the
    range 300hPa to 1100hPa.
*   SHOULD have an absolute accuracy of 1hPa.
*   SHOULD have a relative accuracy of 0.12hPa over 20hPa range
    (equivalent to ~1m accuracy over ~200m change at sea level).

### 7.3.6\. Thermometer

Device implementations:
*   MAY include an ambient thermometer (temperature sensor).
*   MAY but SHOULD NOT include a CPU temperature sensor.

If device implementations include an ambient thermometer (temperature sensor),
they:

*   [C-1-1] MUST be defined as `SENSOR_TYPE_AMBIENT_TEMPERATURE` and MUST
    measure the ambient (room/vehicle cabin) temperature from where the user
    is interacting with the device in degrees Celsius.
*   [C-1-2] MUST be defined as `SENSOR_TYPE_TEMPERATURE`.
*   [C-1-3] MUST measure the temperature of the device CPU.
*   [C-1-4] MUST NOT measure any other temperature.

Note the `SENSOR_TYPE_TEMPERATURE` sensor type was deprecated in Android 4.0.

### 7.3.7\. Photometer

*   Device implementations MAY include a photometer (ambient light sensor).

### 7.3.8\. Proximity Sensor

*   Device implementations MAY include a proximity sensor.

If device implementations include a proximity sensor, they:

*   [C-1-1] MUST measure the proximity of an object in the same direction as the
    screen. That is, the proximity sensor MUST be oriented to detect objects
    close to the screen, as the primary intent of this sensor type is to
    detect a phone in use by the user. If device implementations include a
    proximity sensor with any other orientation, it MUST NOT be accessible
    through this API.
*   [C-1-2] MUST have 1-bit of accuracy or more.


### 7.3.9\. High Fidelity Sensors

If device implementations include a set of higher quality sensors as defined
in this section, and make available them to third-party apps, they:

*   [C-1-1] MUST identify the capability through the
`android.hardware.sensor.hifi_sensors` feature flag.

If device implementations declare `android.hardware.sensor.hifi_sensors`,
they:

*   [C-2-1] MUST have a `TYPE_ACCELEROMETER` sensor which:
    *   MUST have a measurement range between at least -8g and +8g.
    *   MUST have a measurement resolution of at least 1024 LSB/G.
    *   MUST have a minimum measurement frequency of 12.5 Hz or lower.
    *   MUST have a maximum measurement frequency of 400 Hz or higher.
    *   MUST have a measurement noise not above 400 uG/√Hz.
    *   MUST implement a non-wake-up form of this sensor with a buffering
        capability of at least 3000 sensor events.
    *   MUST have a batching power consumption not worse than 3 mW.
    *   SHOULD have a stationary noise bias stability of \<15 μg √Hz from 24hr static
        dataset.
    *   SHOULD have a bias change vs. temperature of ≤ +/- 1mg / °C.
    *   SHOULD have a best-fit line non-linearity of ≤ 0.5%, and sensitivity change vs. temperature of ≤
        0.03%/C°.
    *   SHOULD have white noise spectrum to ensure adequate qualification
        of sensor’s noise integrity.

*   [C-2-2] MUST have a `TYPE_ACCELEROMETER_UNCALIBRATED` with the same
quality requirements as `TYPE_ACCELEROMETER`.

*   [C-2-3] MUST have a `TYPE_GYROSCOPE` sensor which:
    *   MUST have a measurement range between at least -1000 and +1000 dps.
    *   MUST have a measurement resolution of at least 16 LSB/dps.
    *   MUST have a minimum measurement frequency of 12.5 Hz or lower.
    *   MUST have a maximum measurement frequency of 400 Hz or higher.
    *   MUST have a measurement noise not above 0.014°/s/√Hz.
    *   SHOULD have a stationary bias stability of < 0.0002 °/s √Hz from 24-hour static dataset.
    *   SHOULD have a bias change vs. temperature of ≤ +/- 0.05 °/ s / °C.
    *   SHOULD have a sensitivity change vs. temperature of ≤ 0.02% / °C.
    *   SHOULD have a best-fit line non-linearity of ≤ 0.2%.
    *   SHOULD have a noise density of ≤ 0.007 °/s/√Hz.
    *   SHOULD have white noise spectrum to ensure adequate qualification
        of sensor’s noise integrity.
    *   SHOULD have calibration error less than 0.002 rad/s in
        temperature range 10 ~ 40 ℃ when device is stationary.

*   [C-2-4] MUST have a `TYPE_GYROSCOPE_UNCALIBRATED` with the same quality
requirements as `TYPE_GYROSCOPE`.
*   [C-2-5] MUST have a `TYPE_GEOMAGNETIC_FIELD` sensor which:
    *   MUST have a measurement range between at least -900 and +900 uT.
    *   MUST have a measurement resolution of at least 5 LSB/uT.
    *   MUST have a minimum measurement frequency of 5 Hz or lower.
    *   MUST have a maximum measurement frequency of 50 Hz or higher.
    *   MUST have a measurement noise not above 0.5 uT.
*   [C-2-6] MUST have a `TYPE_MAGNETIC_FIELD_UNCALIBRATED` with the same quality
requirements as `TYPE_GEOMAGNETIC_FIELD` and in addition:
    *   MUST implement a non-wake-up form of this sensor with a buffering
        capability of at least 600 sensor events.
    *   SHOULD have white noise spectrum to ensure adequate qualification
        of sensor’s noise integrity.
*   [C-2-7] MUST have a `TYPE_PRESSURE` sensor which:
    *   MUST have a measurement range between at least 300 and 1100 hPa.
    *   MUST have a measurement resolution of at least 80 LSB/hPa.
    *   MUST have a minimum measurement frequency of 1 Hz or lower.
    *   MUST have a maximum measurement frequency of 10 Hz or higher.
    *   MUST have a measurement noise not above 2 Pa/√Hz.
    *   MUST implement a non-wake-up form of this sensor with a buffering
        capability of at least 300 sensor events.
    *   MUST have a batching power consumption not worse than 2 mW.
*   [C-2-8] MUST have a `TYPE_GAME_ROTATION_VECTOR` sensor which:
    *   MUST implement a non-wake-up form of this sensor with a buffering
        capability of at least 300 sensor events.
    *   MUST have a batching power consumption not worse than 4 mW.
*   [C-2-9] MUST have a `TYPE_SIGNIFICANT_MOTION` sensor which:
    *   MUST have a power consumption not worse than 0.5 mW when device is
        static and 1.5 mW when device is moving.
*   [C-2-10] MUST have a `TYPE_STEP_DETECTOR` sensor which:
    *   MUST implement a non-wake-up form of this sensor with a buffering
        capability of at least 100 sensor events.
    *   MUST have a power consumption not worse than 0.5 mW when device is
        static and 1.5 mW when device is moving.
    *   MUST have a batching power consumption not worse than 4 mW.
*   [C-2-11] MUST have a `TYPE_STEP_COUNTER` sensor which:
    *   MUST have a power consumption not worse than 0.5 mW when device is
        static and 1.5 mW when device is moving.
*   [C-2-12] MUST have a `TILT_DETECTOR` sensor which:
    *   MUST have a power consumption not worse than 0.5 mW when device is
        static and 1.5 mW when device is moving.
*   [C-2-13] The event timestamp of the same physical event reported by the
Accelerometer, Gyroscope sensor and Magnetometer MUST be within 2.5
milliseconds of each other.
*   [C-2-14] MUST have Gyroscope sensor event timestamps on the same time
base as the camera subsystem and within 1 milliseconds of error.
*   [C-2-15] MUST deliver samples to applications within 5 milliseconds from
the time when the data is available on any of the above physical sensors
to the application.
*   [C-2-16] MUST not have a power consumption higher than 0.5 mW
when device is static and 2.0 mW when device is moving
when any combination of the following sensors are enabled:
    *   `SENSOR_TYPE_SIGNIFICANT_MOTION`
    *   `SENSOR_TYPE_STEP_DETECTOR`
    *   `SENSOR_TYPE_STEP_COUNTER`
    *   `SENSOR_TILT_DETECTORS`
*   [C-2-17] MAY have a `TYPE_PROXIMITY` sensor, but if present MUST have
a minimum buffer capability of 100 sensor events.

Note that all power consumption requirements in this section do not include the
power consumption of the Application Processor. It is inclusive of the power
drawn by the entire sensor chain—the sensor, any supporting circuitry, any
dedicated sensor processing system, etc.

If device implementations include direct sensor support, they:

* [C-3-1] MUST correctly declare support of direct channel types and direct
  report rates level through the [`isDirectChannelTypeSupported`](
  https://developer.android.com/reference/android/hardware/Sensor.html#isDirectChannelTypeSupported%28int%29)
  and [`getHighestDirectReportRateLevel`](
  https://developer.android.com/reference/android/hardware/Sensor.html#getHighestDirectReportRateLevel%28%29)
  API.
* [C-3-2] MUST support at least one of the two sensor direct channel types
  for all sensors that declare support for sensor direct channel
  *   [`TYPE_HARDWARE_BUFFER`](https://developer.android.com/reference/android/hardware/SensorDirectChannel.html#TYPE_HARDWARE_BUFFER)
  *   [`TYPE_MEMORY_FILE`](https://developer.android.com/reference/android/hardware/SensorDirectChannel.html#TYPE_MEMORY_FILE)
* SHOULD support event reporting through sensor direct channel for primary
  sensor (non-wakeup variant) of the following types:
  *   `TYPE_ACCELEROMETER`
  *   `TYPE_ACCELEROMETER_UNCALIBRATED`
  *   `TYPE_GYROSCOPE`
  *   `TYPE_GYROSCOPE_UNCALIBRATED`
  *   `TYPE_MAGNETIC_FIELD`
  *   `TYPE_MAGNETIC_FIELD_UNCALIBRATED`

### 7.3.10\. Fingerprint Sensor

If device implementations include a secure lock screen, they:

*    SHOULD include a fingerprint sensor.

If device implementations include a fingerprint sensor and make the sensor
available to third-party apps, they:

*   [C-1-1] MUST declare support for the `android.hardware.fingerprint` feature.
*   [C-1-2] MUST fully implement the
[corresponding API](
https://developer.android.com/reference/android/hardware/fingerprint/package-summary.html)
as described in the Android SDK documentation.
*   [C-1-3] MUST have a false acceptance rate not higher than 0.002%.
*   [SR] Are STRONGLY RECOMMENDED to have a spoof and imposter acceptance rate
not higher than 7%.
*   [C-1-4] MUST disclose that this mode may be less secure than a strong PIN,
pattern, or password and clearly enumerate the risks of enabling it, if the
spoof and imposter acceptance rates are higher than 7%.
*   [C-1-5] MUST rate limit attempts for at least 30 seconds after five false
trials for fingerprint verification.
*   [C-1-6] MUST have a hardware-backed keystore implementation, and perform the
fingerprint matching in a Trusted Execution Environment (TEE) or on a chip with
a secure channel to the TEE.
*   [C-1-7] MUST have all identifiable fingerprint data encrypted and
cryptographically authenticated such that they cannot be acquired, read or
altered outside of the Trusted Execution Environment (TEE) as documented in the
[implementation guidelines](
https://source.android.com/devices/tech/security/authentication/fingerprint-hal.html)
on the Android Open Source Project site.
*   [C-1-8] MUST prevent adding a fingerprint without first establishing a chain
of trust by having the user confirm existing or add a new device credential
(PIN/pattern/password) that's secured by TEE; the Android Open Source Project
    implementation provides the mechanism in the framework to do so.
*   [C-1-9] MUST NOT enable 3rd-party applications to distinguish between
individual fingerprints.
*   [C-1-10] MUST honor the DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT
flag.
*   [C-1-11] MUST, when upgraded from a version earlier than Android 6.0, have
the fingerprint data securely migrated to meet the above requirements or
removed.
*   [SR] Are STRONGLY RECOMMENDED to have a false rejection rate of less than 10%,
as measured on the device.
*   [SR] Are STRONGLY RECOMMENDED to have a latency below 1 second, measured from
when the fingerprint sensor is touched until the screen is unlocked, for one
enrolled finger.
*   SHOULD use the Android Fingerprint icon provided in the Android Open Source
Project.

### 7.3.11\. Android Automotive-only sensors

Automotive-specific sensors are defined in the
`android.car.CarSensorManager API`.

#### 7.3.11.1\. Current Gear

See [Section 2.5.1](#2_5_1_hardware) for device-specific requirements.

#### 7.3.11.2\. Day Night Mode

See [Section 2.5.1](#2_5_1_hardware) for device-specific requirements.

#### 7.3.11.3\. Driving Status

See [Section 2.5.1](#2_5_1_hardware) for device-specific requirements.

#### 7.3.11.4\. Wheel Speed

See [Section 2.5.1](#2_5_1_hardware) for device-specific requirements.


## 7.3.12\. Pose Sensor

Device implementations:

*   MAY support pose sensor with 6 degrees of freedom.

If device implementations support pose sensor with 6 degrees of freedom, they:

*   [C-1-1] MUST implement and report [`TYPE_POSE_6DOF`](
https://developer.android.com/reference/android/hardware/Sensor.html#TYPE_POSE_6DOF)
sensor.
*   [C-1-2] MUST be more accurate than the rotation vector alone.