似乎< 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只是暴露了约束类型集,因为它暂时没有更新.
附:当然,如果将来出现某种映射,事情将被打破,但IMO AOSP将保持不变.