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

标签 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
};

当我用 ASensorManager_getSensorList 转储传感器时在 HTC Evo 上,我得到:

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?或者它会根据制造商而改变吗?


编辑:这是来自 ASUS 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

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

最佳答案

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

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

if( sensor == ASENSOR_TYPE_GYROSCOPE )

if( sensor == 4 ) 

至于方向传感器及其缺失的 ENUM 条目 - 这个传感器 was deprecated in API8并且现在建议您使用磁场传感器和加速度计来获得等效的功能 (see example implementation),因此这很可能是它从 ENUM 中消失的原因。

关于android - 为什么在 Android 中缺少传感器类型 3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25643770/

相关文章:

java - Android:将一些只读字节传递给 native C++ 的最有效方法

android - 如何在安卓模拟器上运行APIDemos?

java - Java:放入十进制数字时会崩溃[RESOLVE]

java - Android 中如何比较两个应用程序包的签名?

android-ndk - 使用NDK gradle构建系统中的clang

android - 生成最终存档时出错 : java. io.FileNotFoundException : xxx\bin\resources. ap_ 不存在

java - 调整相机拍摄的照片大小以适合屏幕

android - 在 Android 中开发计步器

android - 通过组合 TYPE_ACCELEROMETER 和 TYPE_MAGNETIC_FIELD,Sensor.TYPE_ROTATION_VECTOR 和 getOrientation 之间的区别

android - Android 上的冗余运动传感器?