文章目录
说明:Sensor 系列文章请参考 Android Sensor
此篇搬运自 android官方网站sensors 。
Sensors 传感器

Android sensors give applications access to a mobile device’s underlying physical sensors. They are data-providing virtual devices defined by sensors.h, the sensor Hardware Abstraction Layer (HAL).
Android 传感器使应用可以访问移动设备的底层物理传感器。它们是负责提供数据的虚拟设备,由传感器硬件抽象层 (HAL) sensors.h 进行定义。
What are Android sensors?
Android sensors are virtual devices that provide data coming from a set of physical sensors: accelerometers, gyroscopes, magnetometers, barometer, humidity, pressure, light, proximity and heart rate sensors.
Not included in the list of physical devices providing data are camera, fingerprint sensor, microphone, and touch screen. These devices have their own reporting mechanism; the separation is arbitrary, but in general, Android sensors provide lower bandwidth data. For example, “100hz x 3 channels” for an accelerometer versus “25hz x 8 MP x 3 channels” for a camera or “44kHz x 1 channel” for a microphone.
Android does not define how the different physical sensors are connected to the system on chip (SoC).
- Often, sensor chips are connected to the SoC through a sensor hub, allowing some low-power monitoring and processing of the data.
- Often, Inter-Integrated Circuit (I2C) or Serial Peripheral Interface (SPI) is used as the transport mechanism.
- To reduce power consumption, some architectures are hierarchical, with some minimal processing being done in the application-specific integrated circuit (ASIC - like motion detection on the accelerometer chip), and more is done in a microcontroller (like step detection in a sensor hub).
- It is up to the device manufacturer to choose an architecture based on accuracy, power, price and package-size characteristics. See Sensor stack for more information.
- Batching capabilities are an important consideration for power optimization. See Batching for more information.
Android 传感器属于虚拟设备,可提供来自以下各种物理传感器的数据:加速度计、陀螺仪、磁力计、气压计、湿度传感器、压力传感器、光传感器、近程传感器和心率传感器。
提供数据的物理设备列表中不包括相机、指纹传感器、麦克风和触摸屏。这些设备有自己的报告机制;这种区别是随意的,但一般来说,Android 传感器提供较低带宽的数据。例如,加速度计为“100 hz x 3 个通道”、相机为“25 hz x 8 MP x 3 个通道”,而麦克风为“44 kHz x 1 个通道”。
Android 不定义不同物理传感器如何连接到系统芯片 (SoC)。
Each Android sensor has a “type” representing how the sensor behaves and what data it provides.
- The official Android Sensor types are defined in sensors.h under the names SENSOR_TYPE_…
- The vast majority of sensors have an official sensor type.
- Those types are documented in the Android SDK.
- Behavior of sensors with those types are tested in the Android Compatibility Test Suite (CTS).
- If a manufacturer integrates a new kind of sensor on an Android device, the manufacturer can define its own temporary type to refer to it.
- Those types are undocumented, so application developers are unlikely to use them, either because they don’t know about them, or know that they are rarely present (only on some devices from this specific manufacturer).
- They are not tested by CTS.
- Once Android defines an official sensor type for this kind of sensor, manufacturers must stop using their own temporary type and use the official type instead. This way, the sensor will be used by more application developers.
- The list of all sensors present on the device is reported by the HAL implementation.
- There can be several sensors of the same type. For example, two proximity sensors or two accelerometers.
- The vast majority of applications request only a single sensor of a given type. For example, an application requesting the default accelerometer will get the first accelerometer in the list.
- Sensors are often defined by wake-up and non-wake-up pairs, both sensors sharing the same type, but differing by their wake-up characteristic.
Android sensors provide data as a series of sensor events.
Each event contains:
- a handle to the sensor that generated it
- the timestamp at which the event was detected or measured, based on SystemClock.elapsedRealtimeNanos()
- and some data
The interpretation of the reported data depends on the sensor type. See the sensor type definitions for details on what data is reported for each sensor type.
每个 Android 传感器都有一个“类型”,表示传感器的行为及其提供的数据。
- 官方 Android 传感器类型在 sensors.h 中的 SENSOR_TYPE_ 名称下进行定义。
- 绝大多数传感器都具有官方传感器类型。
- 这些类型记录在 Android SDK 中。
- 此类传感器的行为在 Android 兼容性测试套件 (CTS) 中进行测试。
- 如果制造商在 Android 设备上集成了一种新型传感器,则可以自行定义一个临时类型来引用它。
- 这些类型不会被记录,因此应用开发者不太可能使用它们,因为开发者不了解它们,或者知道它们很少存在(仅在该特定制造商制造的某些设备上)。
- 它们未经过 CTS 测试。
- 一旦 Android 为这种传感器定义了官方传感器类型,那么制造商必须停止使用自己的临时类型,并改为使用官方类型。这样,该传感器将供更多应用开发者使用。
- 设备上存在的所有传感器的列表由 HAL 实现报告。
Android 传感器提供的数据是一系列传感器事件。
每个事件包含:
- 生成该事件的传感器的句柄
- 检测到或测量事件时的时间戳
- 以及一些数据
对所报告数据的解析取决于传感器类型。有关针对每种传感器类型报告什么数据的详细信息,请参见传感器类型定义。
Existing documentation 现有文档
Targeted at developers 面向开发者
- Overview
- SDK reference
- Stack Overflow and tutorial websites 教程网站
- Because sensors documentation was sometimes lacking, developers resorted to Q&A websites like Stack Overflow to find answers.
- Some tutorial websites exist as well, but do not cover the latest features like batching, significant motion and game rotation vectors.
- The answers over there are not always right, and show where more documentation is needed.
Targeted at manufacturers 面向制造商
- Overview
- This Sensors page and its sub-pages.
- Hardware abstraction layer (HAL)
- /platform/hardware/libhardware/+/master/include/hardware/sensors.h
- Also known as “sensors.h”
- The source of truth. First document to be updated when new features are developed.
- Android CDD(Compatibility Definition Document 兼容性定义文档)
- https://source.android.com/compatibility/9/android-9-cdd
- See sections relative to sensors.
- The CDD is lenient, so satisfying the CDD requirements is not enough to ensure high quality sensors.