Android传感器类型3?

时间:2014-09-03 12:01:45

标签: android android-ndk android-sensors

我正在使用Android传感器。 <sensor.h>有:

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

当我在HTC Evo上使用ASensorManager_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

当我将enums越过列表时,传感器类型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

没有方向(只有一个传感器便宜,我猜它适用于游戏)。

2 个答案:

答案 0 :(得分:2)

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

这些值必须在每台设备上保持不变,否则您的应用程序将无法真正发挥作用。如果类型不能统一,因为可执行二进制文件对数值进行操作,而不是ENUM /定义等,那么为传感器开发将是一个巨大的痛苦。使用ENUM的主要目的是使用它们而不是最终值来使代码更具可读性。更明确的是什么代码什么时候可以看到,即

if( sensor == ASENSOR_TYPE_GYROSCOPE )

大于

if( sensor == 4 ) 

对于方向传感器及其缺失的ENUM条目 - 此传感器was deprecated in API8,现在建议您使用磁场传感器和加速度计来获得相同的功能(see example implementation),以便这样做最有可能它从ENUM中消失的原因。

答案 1 :(得分:1)

看来NDK标题刚刚过时了。 Java文档似乎在Sensor class处有[当前]传感器列表及其类型值。

我想这两个名单在过去的某个时间是一致的。