Android传感器类型3?

问题描述:

我正在使用Android传感器。 <sensor.h>具有:Android传感器类型3?

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

当我转储与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,但也有一些额外的传感器。


编辑:下面是转储从泽基TBQG 1084B平板电脑:

SensorList: STK831x accelerometer (Sensortek) 1 10000 1.000000 

无取向(只有1个传感器是一种便宜的,我想它的游戏)。

+0

它可能不同,但如果您使用Sensor.TYPE_ACCELEROMETER,它将是类似的,值可以更改。 – 2014-09-03 12:29:32

Enum为类型传感器设备可以有,每种类型应该始终在跨平台的数值相同。因此,无论设备类型或供应商是什么,如果有陀螺仪,那么总是应该报告为ASENSOR_TYPE_GYROSCOPE,最后等于4。如果您在设备上看到的陀螺仪报告有所不同,那么这是一个错误,即在该设备的低级驱动程序中,并且很可能会在下一次固件更新等情况下得到修复。

这些值必须在每个设备上保持不变,否则您的应用程序将无法真正起作用。如果由于可执行的二进制文件对数值进行操作而不是ENUM /定义等类型不统一,那么为传感器开发将会是一个巨大的痛苦。有ENUM的主要观点是使用它们而不是最终值来使你的代码更具可读性。它更清楚哪些代码做时,看到即

if(sensor == ASENSOR_TYPE_GYROSCOPE) 

if(sensor == 4) 

至于方向传感器和它的缺失ENUM注册 - 该传感器was deprecated in API8,你现在推荐使用磁场传感器和加速度计获得同等功能(see example implementation),所以这是最有可能的它从ENUM消失的原因。

它看起来NDK标头只是非常过时。 Java文档似乎在Sensor class上有一个[current]列表的传感器及其类型值。

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