n android.view.onSensorChanged() のリファレンス ページでは、デバイスの軸は次のように説明されています。
「X 軸は画面の水平軸 (ポートレート モードでは小さな端、ランドスケープ モードでは長い端) を指し、右を指します。Y 軸は画面の垂直軸を指し、画面の上部 (原点は左下隅にあります。デバイスがテーブルに仰向けに置かれている場合、Z 軸は空を指します。」
また、android.hardware.SensorManager.getOrientation() では、このメソッドはデバイスの方位角、ピッチ、ロールを返します。これらは反時計回りの正の値です。しかし、コードから関数を呼び出して値を出力すると、方位角とピッチは時計回りの方向で正になり、反時計回りの方向で負になります。android.hardware.SensorManager.getRotationMatrix() によって取得される回転マトリックスは、私が主張するものが正しい場合、つまり、方位角とピッチが時計回りの方向で +ve であり、ロールが反時計回りで +ve である場合、要件を満たしています。方向。私が間違っている場合は修正してください。Android 2.3.3 で動作する HTC Wildfire S を使用しています。
方向の値を取得するために使用しているコード セグメントを追加しています。
sensormanager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
Sensor gsensor = sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Sensor msensor = sensormanager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
sensormanager.registerListener(this, gsensor, SensorManager.SENSOR_DELAY_GAME);
sensormanager.registerListener(this, msensor, SensorManager.SENSOR_DELAY_GAME);
-------------------------------------------------------------------------------
final float rad2deg = (float)(180.0f/Math.PI);
int type = event.sensor.getType();
float[] data;
if (type == Sensor.TYPE_ACCELEROMETER) {
data = gravityValues;
} else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
data = geomagneticValues;
} else {
return;
}
for (int i=0 ; i<3 ; i++)
data[i] = event.values[i];
SensorManager.getRotationMatrix(rValues, null, gravityValues, geomagneticValues);
SensorManager.getOrientation(rValues, mOrientation);
result.setText("Compass yaw: " + (int)(mOrientation[0]*rad2deg) + " pitch: " + (int)(mOrientation[1]*rad2deg) +" roll: " + (int)(mOrientation[2]*rad2deg) );
必要な情報について言及していない場合は、教えてください。前もって感謝します。