为什么 <android/sensor.h> 中缺少某些传感器的枚举值?使用它们安全吗?

Why enum values for some sensors are missing from <android/sensor.h>? Is it safe to use them?

<android/sensor.h> 中似乎缺少某些传感器的枚举值。

该文件定义了以下枚举:

/*
 * Sensor types
 * (keep in sync with hardware/sensor.h)
 */

enum {
    ASENSOR_TYPE_ACCELEROMETER      = 1,
    ASENSOR_TYPE_MAGNETIC_FIELD     = 2,
    ASENSOR_TYPE_GYROSCOPE          = 4,
    ASENSOR_TYPE_LIGHT              = 5,
    ASENSOR_TYPE_PROXIMITY          = 8
};

评论说这个枚举与 <hardware/sensor.h> 同步(未公开,它是 android 来源的一部分)。

但在 <hardware/sensor.h> 中,我发现 values 更多有用的传感器,例如压力、温度和湿度传感器:

#define SENSOR_TYPE_ACCELEROMETER         (1) 
#define SENSOR_TYPE_GEOMAGNETIC_FIELD     (2) 
#define SENSOR_TYPE_ORIENTATION           (3)
#define SENSOR_TYPE_GYROSCOPE             (4)
#define SENSOR_TYPE_LIGHT                 (5)
#define SENSOR_TYPE_PRESSURE              (6)
#define SENSOR_TYPE_TEMPERATURE           (7)
#define SENSOR_TYPE_PROXIMITY             (8)
#define SENSOR_TYPE_GRAVITY               (9)
#define SENSOR_TYPE_LINEAR_ACCELERATION   (10)
#define SENSOR_TYPE_ROTATION_VECTOR       (11)
#define SENSOR_TYPE_RELATIVE_HUMIDITY     (12)
// ...
#define SENSOR_TYPE_HEART_BEAT            (31)

为什么有些传感器没有在<android/sensor.h>中列出?使用它们安全且便携吗?

目前使用 <hardware/sensor.h> 中的常量是绝对安全的,因为 SensorManager 使用来自系统范围 ISensorServer 的数据填充其内部传感器列表,而无需对类型值进行任何重新映射。 ISensorServer 使用 <hardware/sensor.h> 常量。

我猜 NDK API 公开受限类型集只是因为它有一段时间没有更新了。

P.S。当然,如果将来出现某种映射,事情会被破坏,但 IMO AOSP 将保持不变。