4

我正在使用三星 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

知道为什么两者之间存在差异,或者我们应该始终监控硬件和软件传感器吗?

4

3 回答 3

2

加速度计、磁性、光、接近、陀螺仪、压力、重力,这些都是硬件传感器。

“iNemoEngine xxx”应该是一种“虚拟传感器”,由 Google 在 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/

于 2013-02-07T12:34:54.780 回答
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 :(
}

希望能帮助到你..

于 2013-02-07T12:57:44.733 回答
0

如 madhus 所述,这 2 个传感器由 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 和 google Inc。但是,由于默认和硬件传感器是 STMicroElectronics,我正在使用它。

于 2013-02-07T13:48:19.390 回答