为什么Android中缺少传感器类型3?

为什么Android中缺少传感器类型3?,android,android-ndk,android-sensors,Android,Android Ndk,Android Sensors,我正在使用Android传感器具有: enum { ASENSOR_TYPE_ACCELEROMETER = 1, ASENSOR_TYPE_MAGNETIC_FIELD = 2, ASENSOR_TYPE_GYROSCOPE = 4, ASENSOR_TYPE_LIGHT = 5, ASENSOR_TYPE_PROXIMITY = 8 }; 当我在HTC Evo上使用传感器

我正在使用Android传感器<代码>具有:

enum {
    ASENSOR_TYPE_ACCELEROMETER      = 1,
    ASENSOR_TYPE_MAGNETIC_FIELD     = 2,
    ASENSOR_TYPE_GYROSCOPE          = 4,
    ASENSOR_TYPE_LIGHT              = 5,
    ASENSOR_TYPE_PROXIMITY          = 8
};
当我在HTC Evo上使用传感器管理器\u getSensorList转储传感器时,我得到:

SensorList: BMA150 3-axis Accelerometer (Bosh), 1
SensorList: AK8973 3-axis Magnetic field sensor (Asahi Kasei), 2
SensorList: AK8973 Orientation sensor (Asahi Kasei), 3
SensorList: CM3602 Proximity sensor (Capella Microsystems), 8
SensorList: CM3602 Light sensor (Capella Microsystems), 5
当我穿过
枚举
到列表时,显示传感器类型3为方向

问题:方向传感器是否始终为传感器类型3?还是会因制造商的不同而有所变化


编辑:以下是华硕TF-101平板电脑的转储文件:

SensorList: MPL rotation vector (Invensense), 11
SensorList: MPL linear accel (Invensense), 10
SensorList: MPL gravity (Invensense), 9
SensorList: MPL Gyro (Invensense), 4
SensorList: MPL accel (Invensense), 1
SensorList: MPL magnetic field (Invensense), 2
SensorList: MPL Orientation (Invensense), 3
SensorList: Lite-On al3000a Ambient Light Sensor (Lite-On), 5
方向再次为3,但还有一些附加传感器


编辑:以下是Zeki TBQG 1084B平板电脑的转储文件:

SensorList: STK831x accelerometer (Sensortek) 1 10000 1.000000

没有方向(而且只有一个传感器比较便宜,我想是游戏用的)。

枚举用于设备可以拥有的传感器类型,并且每种类型在平台上都应该具有相同的数值。因此,无论设备类型或供应商是什么,如果它有陀螺仪,那么它应该始终报告为
传感器类型陀螺仪
,最终等于
4
。如果您在设备上看到不同的陀螺仪报告,则这是一个bug,即在该设备的低级别驱动程序中,很可能会在下次固件更新时修复

每个设备上的这些值必须保持不变,否则您的应用程序将无法真正运行。如果由于可执行二进制文件操作的是数值,而不是枚举/定义等,类型不能统一,那么开发传感器将是一个巨大的难题。拥有枚举的要点是使用它们而不是最终值,以使代码更具可读性。更清楚的是,当看到代码时,代码会做什么

if( sensor == ASENSOR_TYPE_GYROSCOPE )


至于方向传感器及其缺少的枚举条目-建议您现在使用磁场传感器和加速计来获得等效功能(),因此这很可能是它从枚举中消失的原因。

NDK标题似乎已经严重过时。Java文档似乎有一个[当前]传感器列表及其类型值


我想这两个列表在过去某个时候是一致的。

可能不同,但如果使用Sensor.TYPE\u加速计,它将是相似的,值可以更改。
if( sensor == 4 )