传感器类型

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本节介绍传感器轴、基础传感器和复合传感器(活动、姿态、未校准和交互)。

传感器轴

来自许多传感器的传感器事件值在相对于设备是静态的特定帧中表示。

移动设备轴

传感器 API 仅与屏幕的自然方向相关(当设备的屏幕方向发生变化时,轴不会交换。

移动设备传感器 API 坐标系

图 1. Sensor API 使用的坐标系(相对于移动设备)

汽车轴

在 Android Automotive 实现中,轴是相对于车身框架定义的。车辆参考系的原点是后轴的中心。车辆参考系的方向是这样的:

  • X 轴指向右侧,位于与车辆对称平面垂直的水平面上。
  • Y 轴指向前方并且在水平面上。
汽车设备传感器API坐标系

图 2. Sensor API 使用的坐标系(相对于汽车设备)

车辆参考系是右手坐标系。因此,Z 轴指向上方。

参考系的 Z 轴与重力对齐,这意味着 X 轴和 Y 轴都是水平的。因此,Y 轴可能并不总是通过前轴。

基础传感器

基本传感器类型以其代表的物理传感器命名。这些传感器中继来自单个物理传感器的数据(与从其他传感器生成数据的复合传感器相反)。基本传感器类型的示例包括:

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

但是,基本传感器不等于也不应与其底层物理传感器混淆。来自基础传感器的数据不是物理传感器的原始输出,因为应用了校正(例如偏置补偿和温度补偿)。

例如,在以下用例中,基本传感器的特性可能与其底层物理传感器的特性不同:

  • 陀螺仪芯片额定偏置范围为 1 度/秒。
    • 经过工厂校准、温度补偿和偏置补偿后,Android 传感器的实际偏置会降低,可能会达到偏置保证低于 0.01 度/秒的程度。
    • 在这种情况下,我们说 Android 传感器的偏差低于 0.01 度/秒,尽管底层传感器的数据表说 1 度/秒。
  • 功耗为 100 uW 的气压计。
    • 由于生成的数据需要从芯片传输到 SoC,因此从气压计 Android 传感器收集数据的实际功耗可能要高得多,例如 1000 uW。
    • 在这种情况下,我们说 Android 传感器的功耗为 1000 uW,即使在气压计芯片引线处测量的功耗为 100 uW。
  • 校准时消耗100uW的磁力计,但校准时消耗更多。
    • 它的校准程序可能需要激活陀螺仪,消耗 5000 uW,并运行一些算法,再消耗 900 uW。
    • 在这种情况下,我们说(磁力计)Android 传感器的最大功耗为 6000 uW。
    • 在这种情况下,平均功耗是更有用的度量,它是通过 HAL 在传感器静态特性中报告的。

加速度计

报告模式:连续

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER)返回非唤醒传感器

加速度计传感器报告设备沿三个传感器轴的加速度。测得的加速度包括物理加速度(速度变化)和重力。测量值在sensors_event_t.acceleration 的x、y 和z 字段中报告。

所有值均以 SI 单位 (m/s^2) 为单位,测量设备的加速度减去沿三个传感器轴的重力。

以下是示例:

  • 自由落体时 (x, y, z) 的范数应接近 0。
  • 当设备平放在桌子上并将其左侧推向右侧时,x 加速度值为正。
  • 当设备平放在桌子上时,沿 z 方向的加速度值为 +9.81 alo,这对应于设备的加速度 (0 m/s^2) 减去重力 (-9.81 m/s^2)。
  • 当设备平放在桌子上并被推向天空时,加速度值大于+9.81,对应于设备的加速度(+A m/s^2)减去重力(-9.81 m /s^2)。

使用以下方法校准读数:

  • 温度补偿
  • 在线偏置校准
  • 在线秤校准

偏置和比例校准只能在传感器停用时更新,以避免在流式传输期间导致值的跳跃。

加速度计还通过sensors_event_t.acceleration.status报告其预期读数的准确度。有关此字段可能值的更多信息,请参阅SensorManagerSENSOR_STATUS_*常量。

环境温度

报告模式:变化

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE)返回非唤醒传感器

该传感器以摄氏度为单位提供环境(室温)温度。

磁场传感器

报告模式:连续

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD)返回非唤醒传感器

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

磁场传感器(也称为磁力计)报告沿三个传感器轴测量的环境磁场。

测量结果在sensors_event_t.magnetic的 x、y 和 z 字段中报告,所有值都以微特斯拉 (uT) 为单位。

磁力计还通过sensors_event_t.magnetic.status报告其预期读数的准确度。有关此字段可能值的更多信息,请参阅SensorManagerSENSOR_STATUS_*常量。

使用以下方法校准读数:

  • 温度补偿
  • 工厂(或在线)软铁校准
  • 在线硬铁校准

陀螺仪

报告模式:连续

getDefaultSensor(SENSOR_TYPE_GYROSCOPE)返回非唤醒传感器

陀螺仪传感器报告设备围绕三个传感器轴的旋转速率。

逆时针方向旋转为正(右手定则)。也就是说,如果设备看起来是逆时针旋转,则从 x、y 或 z 轴上的某个正位置看位于原点上的设备的观察者将报告正旋转。请注意,这是正旋转的标准数学定义,与航空航天的横滚定义不一致。

测量值报告在sensors_event_t.gyro的 x、y 和 z 字段中,所有值都以弧度每秒 (rad/s) 为单位。

使用以下方法校准读数:

  • 温度补偿
  • 工厂(或在线)规模补偿
  • 在线偏置校准(消除漂移)

陀螺仪还通过sensors_event_t.gyro.status报告其预期读数的准确度。有关此字段可能值的更多信息,请参阅SensorManagerSENSOR_STATUS_*常量。

陀螺仪不能基于磁力计和加速度计来模拟,因为这会导致它的局部一致性和响应性降低。它必须基于通常的陀螺仪芯片。

心率

报告模式:变化

getDefaultSensor(SENSOR_TYPE_HEART_RATE)返回非唤醒传感器

心率传感器报告触摸设备的人的当前心率。

当前心率(BPM)报告在sensors_event_t.heart_rate.bpm中,传感器的状态报告在sensors_event_t.heart_rate.status中。有关此字段可能值的更多信息,请参阅SensorManagerSENSOR_STATUS_*常量。特别是,在第一次激活时,除非已知设备不在身体上,否则第一个事件的状态字段必须设置为SENSOR_STATUS_UNRELIABLE 。因为这个传感器是不断变化的,所以当且仅当heart_rate.bpmheart_rate.status自上次事件发生变化时才会生成事件。事件的生成速度不会比每个sampling_period快。

sensor_t.requiredPermission始终是SENSOR_PERMISSION_BODY_SENSORS

报告模式:变化

getDefaultSensor(SENSOR_TYPE_LIGHT)返回非唤醒传感器

光传感器以 SI 勒克斯为单位报告当前照度。

测量值在sensors_event_t.light中报告。

接近

报告模式:变化

通常定义为唤醒传感器

getDefaultSensor(SENSOR_TYPE_PROXIMITY)返回唤醒传感器

接近传感器报告从传感器到最近的可见表面的距离。

在 Android 4.4 之前,接近传感器始终是唤醒传感器,在检测到接近变化时唤醒 SoC。在Android 4.4之后,我们建议先实现这个传感器的唤醒版本,因为它是用来在打电话时打开和关闭屏幕的传感器。

sensors_event_t.distance中以厘米为单位报告测量值。请注意,某些接近传感器仅支持二进制“近”或“远”测量。在这种情况下,传感器在“远”状态下报告其sensor_t.maxRange值,在“近”状态下报告小于sensor_t.maxRange的值。

压力

报告模式:连续

getDefaultSensor(SENSOR_TYPE_PRESSURE)返回非唤醒传感器

压力传感器(也称为气压计)以百帕 (hPa) 为单位报告大气压力。

读数使用校准

  • 温度补偿
  • 工厂偏差校准
  • 工厂规模校准

气压计通常用于估计海拔变化。要估计绝对海拔,必须使用海平面压力(根据天气而变化)作为参考。

相对湿度

报告模式:变化

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY)返回非唤醒传感器

相对湿度传感器测量相对环境空气湿度并返回百分比值。

复合传感器类型

复合传感器通过处理和/或融合来自一个或多个物理传感器的数据来生成数据。 (任何不是基本传感器的传感器都称为复合传感器。)复合传感器的示例包括:

与基础传感器一样,复合传感器的特性来自其最终数据的特性。例如,游戏旋转矢量的功耗可能等于加速度计芯片、陀螺仪芯片、处理数据的芯片和传输数据的总线的功耗之和。作为另一个例子,游戏旋转矢量的漂移取决于校准算法的质量和物理传感器特性一样多。

下表列出了可用的复合传感器类型。每个复合传感器都依赖于来自一个或多个物理传感器的数据。避免选择其他底层物理传感器来近似结果,因为它们提供了糟糕的用户体验。

传感器类型类别底层物理传感器报告模式

游戏旋转矢量

态度

加速度计、陀螺仪、不得使用磁力计

连续的

地磁旋转矢量低功耗传感器

态度

加速度计,磁力计,不得使用陀螺仪

连续的

扫视手势低功耗传感器

相互作用

不明确的

一发

重力

态度

加速度计、陀螺仪

连续的

陀螺仪未校准

未校准

陀螺仪

连续的

直线加速度

活动

加速度计、陀螺仪(如果有)或磁力计(如果没有陀螺仪)

连续的

未校准的磁场

未校准

磁力计

连续的

方向(已弃用)

态度

加速度计、磁力计、陀螺仪(如果有)

连续的

拿起手势低功耗传感器

相互作用

不明确的

一发

旋转矢量

态度

加速度计、磁力计、陀螺仪

连续的

重大运动低功耗传感器

活动

加速度计(或其他只要非常低的功率)

一发

计步器低功耗传感器

活动

加速度计

变化中

步进检测器低功耗传感器

活动

加速度计

特别的

倾斜探测器低功耗传感器

活动

加速度计

特别的

起床手势低功耗传感器

相互作用

不明确的

一发

低功耗传感器 = 低功耗传感器

活动复合传感器

直线加速度

底层物理传感器:加速度计和(如果有)陀螺仪(或磁力计,如果没有陀螺仪)

报告模式:连续

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION)返回非唤醒传感器

线性加速度传感器报告传感器框架中设备的线性加速度,不包括重力。

输出在概念上是:加速度计的输出减去重力传感器的输出。在sensors_event_t.acceleration的 x、y 和 z 字段中以 m/s^2 报告。

当设备静止时,所有轴上的读数应接近 0。

如果设备具有陀螺仪,则线性加速度传感器必须使用陀螺仪和加速度计作为输入。

如果设备没有陀螺仪,线性加速度传感器必须使用加速度计和磁力计作为输入。

重大运动

底层物理传感器:加速度计(或其他只要低功耗)

报告模式:一次性

低电量

仅实现此传感器的唤醒版本。

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION)返回唤醒传感器

当检测到显着运动时触发显着运动检测器:可能导致用户位置变化的运动。

此类重大动议的示例包括:

  • 步行或骑自行车
  • 坐在移动的汽车、长途汽车或火车上

不触发显着运动的情况示例:

  • 手机在口袋里,人不动
  • 电话在桌子上,由于附近的交通或洗衣机,桌子有点晃动

在高层,重要运动检测器用于降低位置确定的功耗。当定位算法检测到设备处于静止状态时,它们可以切换到低功耗模式,当用户改变位置时,它们依靠显着的运动来唤醒设备。

该传感器必须是低功率的。它对可能导致少量误报的功耗进行了权衡。这样做有几个原因:

  • 该传感器的目标是节省电力。
  • 当用户没有移动(误报)时触发事件在功率方面是昂贵的,因此应该避免。
  • 用户移动时不触发事件(假阴性)是可以接受的,只要不重复执行即可。如果用户已经步行了 10 秒,那么在这 10 秒内不触发事件是不可接受的。

每个传感器事件在sensors_event_t.data[0]中报告1

步进检测器

底层物理传感器:加速度计(可能还有其他传感器,只要低功耗)

报告模式:特殊(每一步一个事件)

低电量

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR)返回非唤醒传感器

每次用户迈出一步时,步数检测器都会生成一个事件。

事件sensors_event_t.timestamp的时间戳对应于脚接触地面的时间,从而产生较大的加速度变化。

与计步器相比,计步器应具有较低的延迟(小于两秒)。步数检测器和计步器都检测用户何时步行、跑步和上楼梯。当用户骑自行车、开车或在其他车辆中时,它们不应触发。

该传感器必须是低功率的。也就是说,如果无法在硬件中进行步进检测,则不应定义此传感器。特别是,当步数检测器被激活而加速度计没有被激活时,只有步数应该触发中断(不是每个加速度计读数)。

sampling_period_ns对步进检测器没有影响。

每个传感器事件在sensors_event_t.data[0]中报告1

计步器

底层物理传感器:加速度计(可能还有其他传感器,只要低功耗)

报告模式:变化

低电量

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER)返回非唤醒传感器

计步器报告自上次激活后用户所采取的步数。

测量值在sensors_event_t.step_counter中报告为uint64_t ,并且仅在系统重新启动时重置为零。

事件的时间戳设置为执行该事件的最后一步的时间。

有关步长时间的含义,请参见步长检测器传感器类型。

与计步器相比,计步器可以有更高的延迟(最多 10 秒)。由于这种延迟,该传感器具有很高的准确性;一整天的措施后的步数应在实际步数的10%以内。步数检测器和计步器都检测用户何时步行、跑步和上楼梯。当用户骑自行车、开车或在其他车辆中时,它们不应触发。

硬件必须确保内部步数永远不会溢出。硬件内部计数器的最小尺寸应为 16 位。在即将溢出的情况下(最多每 ~2^16 步),可以唤醒 SoC,以便驱动程序可以进行计数器维护。

交互中所述,当此传感器运行时,它不会干扰任何其他传感器,尤其是加速度计,它很可能正在使用中。

如果特定设备不支持这些操作模式,则 HAL 不得报告此传感器类型。也就是说,在 HAL 中“模拟”这个传感器是不可接受的。

该传感器必须是低功率的。也就是说,如果无法在硬件中完成步进检测,则不应定义此传感器。特别是,当计步器被激活而加速度计没有被激活时,只有步数应该触发中断(不是加速度计数据)。

倾斜探测器

底层物理传感器:加速度计(可能还有其他传感器,只要低功耗)

报告模式:特殊

低电量

仅实现此传感器的唤醒版本。

getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR)返回唤醒传感器

每次检测到倾斜事件时,倾斜检测器都会生成一个事件。

倾斜事件由 2 秒窗口平均重力的方向定义,自激活或传感器生成的最后一个事件以来至少改变 35 度。这是算法:

  • reference_estimated_gravity = 激活后第一秒内加速度计测量值的平均值或生成最后一个倾斜事件时的估计重力。
  • current_estimated_gravity = 过去 2 秒内加速度计测量值的平均值。
  • angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees时触发

没有改变手机方向的大加速度不应触发倾斜事件。例如,驾驶汽车时的急转弯或强烈加速不应触发倾斜事件,即使平均加速度的角度可能变化超过 35 度。通常,该传感器仅在加速度计的帮助下实现。如果其他传感器不会显着增加功耗,也可以使用它们。这是一个低功耗传感器,应该允许 SoC 进入挂起模式。不要在 HAL 中模拟此传感器。每个传感器事件在sensors_event_t.data[0]中报告1

姿态复合传感器

旋转矢量

底层物理传感器:加速度计、磁力计和陀螺仪

报告模式:连续

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR)返回非唤醒传感器

旋转矢量传感器报告设备相对于东-北-上坐标系的方向。它通常通过加速度计、陀螺仪和磁力计读数的集成获得。东-北-上坐标系定义为直接正交基,其中:

  • X 指向东方,与地面相切。
  • Y 指向北方,与地面相切。
  • Z指向天空并垂直于地面。

手机的方向由将东-北-上坐标与手机坐标对齐所需的旋转来表示。也就是说,将旋转应用于世界框架 (X,Y,Z) 将使它们与手机坐标 (x,y,z) 对齐。

旋转可以看作是围绕轴rot_axis将手机旋转角度 theta 以从参考(东-北-上对齐)设备方向到当前设备方向。旋转被编码为单位四元数的四个无单位 x、y、z、w 分量:

  • sensors_event_t.data[0] = rot_axis.x*sin(theta/2)
  • sensors_event_t.data[1] = rot_axis.y*sin(theta/2)
  • sensors_event_t.data[2] = rot_axis.z*sin(theta/2)
  • sensors_event_t.data[3] = cos(theta/2)

在哪里:

  • rot_axis的 x、y 和 z 字段是表示旋转轴的单位长度向量的东-北-上坐标
  • theta是旋转角度

四元数是单位四元数:它必须是范数1 。未能确保这一点将导致不稳定的客户端行为。

此外,该传感器报告估计的航向精度:

sensors_event_t.data[4] = estimated_accuracy (以弧度为单位)

航向误差必须在 95% 的时间内小于estimated_accuracy 。该传感器必须使用陀螺仪作为主要方向变化输入。

该传感器还使用加速度计和磁力计输入来弥补陀螺仪漂移,仅使用加速度计和磁力计无法实现。

游戏旋转矢量

底层物理传感器:加速度计和陀螺仪(无磁力计)

报告模式:连续

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR)返回非唤醒传感器

游戏旋转矢量传感器类似于旋转矢量传感器,但不使用地磁场。因此 Y 轴不指向北方,而是指向其他参考。允许该参考漂移与陀螺仪绕 Z 轴漂移相同的数量级。

有关如何设置sensors_event_t.data[0-3]的详细信息,请参阅旋转矢量传感器。此传感器不报告估计的航向精度: sensors_event_t.data[4]已保留,应设置为0

在理想情况下,手机旋转并返回到相同的真实世界方向应该报告相同的游戏旋转向量。

该传感器必须基于陀螺仪和加速度计。它不能使用磁力计作为输入,此外,通过估计陀螺仪偏置间接。

重力

底层物理传感器:加速度计和(如果有)陀螺仪(或磁力计,如果没有陀螺仪)

报告模式:连续

getDefaultSensor(SENSOR_TYPE_GRAVITY)返回非唤醒传感器

重力传感器报告设备坐标中重力的方向和大小。

sensors_event_t.acceleration的 x、y 和 z 字段中以 m/s^2 报告重力矢量分量。

当设备处于静止状态时,重力传感器的输出应与加速度计的输出相同。在地球上,震级约为 9.8 m/s^2。

如果设备有陀螺仪,重力传感器必须使用陀螺仪和加速度计作为输入。

如果设备没有陀螺仪,重力传感器必须使用加速度计和磁力计作为输入。

地磁旋转矢量

底层物理传感器:加速度计和磁力计(无陀螺仪)

报告模式:连续

低电量

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR)返回非唤醒传感器

地磁旋转矢量类似于旋转矢量传感器,但使用磁力计且没有陀螺仪。

该传感器必须基于磁力计。它不能使用陀螺仪来实现,并且该传感器不能使用陀螺仪输入。

有关如何设置sensors_event_t.data[0-4]的详细信息,请参阅旋转矢量传感器。

就像旋转矢量传感器一样,95% 的时间航向误差必须小于估计精度 ( sensors_event_t.data[4] )。

这个传感器必须是低功耗的,所以它必须在硬件中实现。

方向(已弃用)

底层物理传感器:加速度计、磁力计和(如果有)陀螺仪

报告模式:连续

getDefaultSensor(SENSOR_TYPE_ORIENTATION)返回非唤醒传感器

注意:这是一种较旧的传感器类型,已在 Android SDK 中弃用。它已经被旋转矢量传感器所取代,它的定义更加清晰。尽可能在方向传感器上使用旋转矢量传感器。

方向传感器报告设备的姿态。测量值在sensors_event_t.orientation的 x、y 和 z 字段中以度数报告:

  • sensors_event_t.orientation.x : 方位角,磁北方向和 Y 轴之间的角度,围绕 Z 轴 ( 0<=azimuth<360 )。 0=北,90=东,180=南,270=西。
  • sensors_event_t.orientation.y :俯仰,绕 X 轴旋转 ( -180<=pitch<=180 ),当 Z 轴向 Y 轴移动时为正值。
  • sensors_event_t.orientation.z :滚动,绕 Y 轴旋转 ( -90<=roll<=90 ),当 X 轴向 Z 轴移动时为正值。

请注意,由于历史原因,滚动角在顺时针方向上为正。 (从数学上讲,逆时针方向应该是正数):

相对于设备的方向描述

图 3.相对于设备的方向

这个定义不同于航空中使用的偏航、俯仰和滚动,其中 X 轴沿着飞机的长边(机尾到机头)。

方向传感器还通过sensors_event_t.orientation.status报告它期望其读数的准确度。有关此字段可能值的更多信息,请参阅SensorManagerSENSOR_STATUS_*常量。

未校准的传感器

未校准的传感器提供更多的原始结果,并且可能包含一些偏差,但也包含更少的来自通过校准应用的校正的“跳跃”。一些应用程序可能更喜欢这些未经校准的结果,因为它们更流畅、更可靠。例如,如果一个应用程序试图进行自己的传感器融合,那么引入校准实际上会扭曲结果。

加速度计未校准

底层物理传感器:加速度计

报告模式:连续

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED)返回非唤醒传感器

未经校准的加速度计传感器报告设备沿三个传感器轴的加速度,没有任何偏差校正(工厂偏差和温度补偿应用于未经校准的测量)以及偏差估计。所有值均以 SI 单位 (m/s^2) 为单位,并在sensors_event_t.uncalibrated_accelerometer字段中报告:

  • x_uncalib :沿 X 轴的加速度(无偏置补偿)
  • y_uncalib :沿 Y 轴的加速度(无偏置补偿)
  • z_uncalib :沿 Z 轴的加速度(无偏置补偿)
  • x_bias :沿 X 轴的估计偏差
  • y_bias :沿 Y 轴的估计偏差
  • z_bias :沿 Z 轴的估计偏差

陀螺仪未校准

底层物理传感器:陀螺仪

报告模式:连续

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED)返回非唤醒传感器

未校准的陀螺仪报告围绕传感器轴的旋转速率,而不对其应用偏差补偿,以及偏差估计。所有值都以弧度/秒为单位,并在sensors_event_t.uncalibrated_gyro的字段中报告:

  • x_uncalib : 绕 X 轴的角速度(无漂移补偿)
  • y_uncalib : 绕 Y 轴的角速度(无漂移补偿)
  • z_uncalib : 绕 Z 轴的角速度(无漂移补偿)
  • x_bias : 估计绕 X 轴的漂移
  • y_bias : 估计绕 Y 轴的漂移
  • z_bias : 估计绕 Z 轴的漂移

从概念上讲,未校准测量是校准测量和偏差估计的总和: _uncalibrated = _calibrated + _bias

x_biasy_biasz_bias值预计会在偏差估计值发生变化时立即跳跃,并且它们应该在其余时间保持稳定。

有关使用的坐标系的详细信息,请参见陀螺仪传感器的定义。

必须对测量应用工厂校准和温度补偿。此外,必须实施陀螺仪漂移估计,以便可以在x_biasy_biasz_bias中报告合理的估计。如果实施无法估计漂移,则不得实施此传感器。

如果存在此传感器,则相应的陀螺仪传感器也必须存在,并且两个传感器必须共享相同的sensor_t.namesensor_t.vendor值。

未校准的磁场

底层物理传感器:磁力计

报告模式:连续

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED)返回非唤醒传感器

未校准的磁场传感器报告环境磁场以及硬铁校准估计。所有值都以微特斯拉 (uT) 为单位,并在sensors_event_t.uncalibrated_magnetic字段中报告:

  • x_uncalib :沿 X 轴的磁场(无硬铁补偿)
  • y_uncalib : 沿 Y 轴的磁场(无硬铁补偿)
  • z_uncalib :沿 Z 轴的磁场(无硬铁补偿)
  • x_bias :沿 X 轴估计的硬铁偏差
  • y_bias :沿 Y 轴估计的硬铁偏差
  • z_bias :沿 Z 轴估计的硬铁偏差

从概念上讲,未校准测量是校准测量和偏差估计的总和: _uncalibrated = _calibrated + _bias

未经校准的磁力计允许更高级别的算法来处理坏的硬铁估计。 x_biasy_biasz_bias值预计会在硬铁估计值发生变化时立即跳跃,并且它们应该在其余时间保持稳定。

测量时必须应用软铁校准和温度补偿。此外,必须实施硬铁估计,以便可以在x_biasy_biasz_bias中报告合理的估计。如果实施无法估计偏差,则不得实施此传感器。

如果存在此传感器,则必须存在相应的磁场传感器,并且两个传感器必须共享相同的sensor_t.namesensor_t.vendor值。

铰链角度

报告模式:变化

getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE)返回唤醒传感器

铰链角度传感器测量设备两个组成部分之间的角度(以度为单位)。通过这种传感器类型测量的铰链的移动预计会改变用户与设备交互的方式,例如,通过展开或显示显示器。

交互复合传感器

一些传感器主要用于检测与用户的交互。 We don't define how those sensors must be implemented, but they must be low power and it's the responsibility of the device manufacturer to verify their quality in terms of user experience.

Wake up gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) returns a wake-up sensor

A wake up gesture sensor enables waking up the device based on a device specific motion. When this sensor triggers, the device behaves as if the power button was pressed, turning the screen on. This behavior (turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings don't impact the behavior of the sensor: only whether the framework turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.

This sensor must be low power, as it's likely to be activated 24/7.

Each sensor event reports 1 in sensors_event_t.data[0] .

Pick up gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) returns a wake-up sensor

A pick-up gesture sensor triggers when the device is picked up regardless of wherever it was before (desk, pocket, bag).

Each sensor event reports 1 in sensors_event_t.data[0] .

Glance gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) returns a wake-up sensor

A glance gesture sensor enables briefly turning the screen on to enable the user to glance content on screen based on a specific motion. When this sensor triggers, the device will turn the screen on momentarily to allow the user to glance notifications or other content while the device remains locked in a non-interactive state (dozing), then the screen will turn off again. This behavior (briefly turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings do not impact the behavior of the sensor: only whether the framework briefly turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.

This sensor must be low power, as it's likely to be activated 24/7. Each sensor event reports 1 in sensors_event_t.data[0] .

Limited axes IMU sensors

Available from Android 13, limited axes IMU sensors are sensors that support use cases where not all three axes (x, y, z) are available. Standard IMU types in Android (such as SENSOR_TYPE_ACCELEROMETER and SENSOR_TYPE_GYROSCOPE ) assume that all three axes are supported. However, not all form factors and devices support 3-axis accelerometers and 3-axis gyroscopes.

Accelerometer limited axes

Underlying physical sensors: Accelerometer

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES) returns a non-wake-up sensor

An accelerometer limited axes sensor is equivalent to TYPE_ACCELEROMETER but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the acceleration value for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the acceleration values for unused axes to 0 , instead of having undefined values.

Gyroscope limited axes

Underlying physical sensors: Gyroscope

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES) returns a non-wake-up sensor

A gyroscope limited axes sensor is equivalent to TYPE_GYROSCOPE but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the angular speed value for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the angular speed values for unused axes to 0 .

Accelerometer limited axes uncalibrated

Underlying physical sensors: Accelerometer

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED) returns a non-wake-up sensor

An accelerometer limited axes uncalibrated sensor is equivalent to TYPE_ACCELEROMETER_UNCALIBRATED but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the acceleration and bias values for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the acceleration and bias values for unused axes to 0 .

Gyroscope limited axes uncalibrated

Underlying physical sensors: Gyroscope

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED) returns a non-wake-up sensor

A gyroscope limited axes uncalibrated sensor is equivalent to TYPE_GYROSCOPE_UNCALIBRATED but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the angular speed and drift values for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the angular speed and drift values for unused axes to 0 .

Composite limited axes IMU

Underlying physical sensors: Any combination of 3-axis accelerometer, 3-axis gyroscope, 3-axis accelerometer uncalibrated, and 3-axis gyroscope uncalibrated sensors.

Reporting-mode: Continuous

A composite limited axes IMU sensor is equivalent to a limited axes IMU sensor but instead of being supported at the HAL, it converts the 3-axis sensor data into the equivalent limited axes variants. These composite sensors are only enabled for automotive devices.

The following table shows an example conversion from a standard 3-axis accelerometer to a composite limited axes accelerometer.

SensorEvent Values for SENSOR_TYPE_ACCELEROMETER Example SENSOR_TYPE_ACCELEROMETER SensorEvent Composite SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES SensorEvent
values[0]

-0.065

-0.065

values[1]

0.078

0.078

values[2]

9.808

9.808

values[3]

N/A

1.0

values[4]

N/A

1.0

values[5]

N/A

1.0

Automotive sensors

Sensors to support automotive use cases.

Heading

Underlying physical sensors: Any combination of GPS, magnetometer, accelerometer, and gyroscope.

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_HEADING) returns a non-wake-up sensor

Available from Android 13, a heading sensor measures the direction in which the device is pointing relative to true north in degrees. The heading sensor includes two SensorEvent values. One for the measured device heading and one for the accuracy of the provided heading value.

Heading values reported by this sensor must be between 0.0 (inclusive) and 360.0 (exclusive), with 0 indicating north, 90 east, 180 south, and 270 west.

Accuracy for this sensor is defined at 68 percent confidence. In the case where the underlying distribution is Gaussian normal, the accuracy is one standard deviation. For example, if the heading sensor returns a heading value of 60 degrees and an accuracy value of 10 degrees, there's a 68 percent probability of the true heading being between 50 degrees and 70 degrees.