我正在使用三星Galaxy S3。当我检索到可用的传感器时:
我得到了如下结果:
LSM330DLC 3-axis Accelerometer TYPE_ACCELEROMETER
AK8975C 3-axis Magnetic field sensor TYPE_MAGNETIC_FIELD
iNemoEngine Orientation sensor TYPE_ORIENTATION
CM36651 Light sensor TYPE_LIGHT
CM36651 Proximity sensor TYPE_PROXIMITY
LSM330DLC Gyroscope sensor TYPE_GYROSCOPE
iNemoEngine Gravity sensor TYPE_GRAVITY
iNemoEngine Linear Acceleration sensor-S/W TYPE_LINEAR_ACCELERATION
iNemoEngine Rotation_Vector sensor TYPE_ROTATION_VECTOR
LPS331AP Pressure Sensor TYPE_PRESSURE
Rotation Vector Sensor TYPE_ROTATION_VECTOR
Gravity Sensor - software sensor TYPE_GRAVITY
Linear Acceleration Sensor TYPE_LINEAR_ACCELERATION
Orientation Sensor TYPE_ORIENTATION
Corrected Gyroscope Sensor TYPE_GYROSCOPE
STMicroelectronics似乎是默认设备,谷歌公司和三星公司提供的传感器可能是次要传感器。
当我使用getVendor()方法时,它返回了STMicroelectronics(作为硬件默认传感器)和三星。但是当我注册了两个传感器时,onSensorChanged()被调用返回了方向值(俯仰,滚动和方位角),差别很大。
例如,我在相同的时间戳上获得了以下值(差异为几秒)。
pitch: roll: azimuth:
Samsung 0.5917465 -4.212 84.583
STMicroelectronics 0.0865345 -3.88854 356.825
为什么两者都存在差异,或者我们是否应该始终监控硬件和软件传感器?
答案 0 :(得分:2)
加速度计,磁力,光线,接近度,陀螺仪,压力,重力,这些都是硬件传感器。
'iNemoEngine xxx'应该是谷歌在ICS中实施的一种“虚拟传感器”。线性加速度计,旋转矢量,方向,这些是使用传感器融合算法实现的软件传感器。
http://electronicdesign.com/ios/understanding-virtual-sensors-sensor-fusion-context-aware-applications http://www.sensorplatforms.com/which-sensors-in-android-gets-direct-input-what-are-virtual-sensors/ http://www.thousand-thoughts.com/2012/03/android-sensor-fusion-tutorial/
答案 1 :(得分:2)
传感器对象将是设备上所有可用传感器的列表。
要检查特定传感器,请使用其他传感器常量之一,例如TYPE_TEMPERATURE,TYPE_RELATIVE_HUMIDITY或TYPE_PRESSURE。
还有getDefaultSensor()方法。将特定传感器常量传递给它还将确定设备上是否有传感器。
如果设备具有多个给定类型的传感器,则其中一个传感器将被设置为默认传感器。如果没有设置默认传感器,getDefaultSensor()将返回null,从而表明传感器不存在。
例如,使用getDefaultSensor()方法检查陀螺仪传感器的代码可能如下所示。
if (mSensorMgr.getDefaultSensor(Sensor.TYPE_GYROSCOPE) != null)
{
// Yesssss...gyroscope sensor available
}
else
{
// There's no gyroscope on this device :(
}
希望有所帮助......
答案 2 :(得分:0)
2个传感器由madhus提到的2个供应商提供。它可以使用代码获得:
List<Sensor> gyro =mSensorManager.getSensorList(Sensor.TYPE_GYROSCOPE);
for(int i=0;i<gyro.size();i++) {
Log.d(TAG,"The vendor is: " +gyro.get(i).getVendor() + " **" +gyro.get(i).getVersion());
}
除了定位(Samsung Inc和STMicroElectronics)之外,我还为STMicroElectronics和谷歌公司提供了所有传感器供应商。但是,由于默认和硬件传感器是STMicroElectronics,我正在使用它。