4

私はSamsungGalaxyS3を使用しています。利用可能なセンサーを取得したとき:

以下のような結果が得られました:

 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がデフォルトのセンサーのようで、GoogleIncとSamsungIncが提供するセンサーがセカンダリセンサーである可能性があります。getVendor()メソッドを使用すると、STMicroelectronics(ハードウェアのデフォルトセンサー)とSamsungが返されました。しかし、両方のセンサーを登録すると、onSensorChanged()が呼び出され、方向の値(ピッチ、ロール、方位角)が大きく異なります。

たとえば、同じタイムスタンプで次の値を取得しました(数秒の差があります)。

                         pitch:       roll:                   azimuth:
Samsung                 0.5917465    -4.212                   84.583
STMicroelectronics      0.0865345    -3.88854                 356.825

両方に違いがある理由、またはハードウェアセンサーとソフトウェアセンサーの両方を常に監視する必要がある理由について何か考えはありますか?

4

3 に答える 3

2

センサー オブジェクトは、デバイスで使用可能なすべてのセンサーのリストになります。

特定のセンサーを確認するには、TYPE_TEMPERATURE、TYPE_RELATIVE_HUMIDITY、TYPE_PRESSURE などの他のセンサー定数のいずれかを使用します。

getDefaultSensor() メソッドもあります。特定のセンサー定数を渡すと、センサーがデバイスで使用可能かどうかも判断されます。

また、デバイスに特定のタイプのセンサーが複数ある場合は、そのうちの 1 つが既定のセンサーとして設定されます。デフォルトのセンサーが設定されていない場合、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 に答える
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 に答える
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とgoogleIncとしてベンダーを取得しました。ただし、デフォルトのハードウェアセンサーはSTMicroElectronicsであるため、これを使用しています。

于 2013-02-07T13:48:19.390 に答える