現在、私は 'Sensor.TYPE_ORIENTATION'を置き換えようとしています。 したがって、Android Documentationには情報のほとんどが欠けています。ここでSOのデバッグとdiggin中に私はazimuth
を計算する方法を考え出しました。これはかつてOrientationSensorによって提供されました。 私はこの方法でそれを実行します。SensorManager.getOrientation()を使用して「ピッチ」と「ロール」を計算する方法
float accelerometerVals[] = new float[3];
float magneticVals[] = new float[3];
float orientationSensorVals[] = new float[3];
float rotationMatrix[] = new float[16];
float orientation[] = new float[3];
@Override
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(event.values, 0, accelerometerVals, 0, 3);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(event.values, 0, magneticVals, 0, 3);
break;
case Sensor.TYPE_ORIENTATION:
System.arraycopy(event.values, 0, orientationSensorVals, 0, 3);
break;
default:
break;
}
if (null != magneticVals && null != accelerometerVals){
SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerVals, magneticVals)
SensorManager.getOrientation(rotationMatrix, orientation);
float azimuth = Math.toDegrees(orientation[0])
//this calculation gives me the Azimuth in the same format that OrientationSensor
azimuth += (azimuth >= 0) ? 0 : 360
float FALSE_PITCH = Math.toDegrees(orientation[1])
float FALSE_ROLL = Math.toDegrees(orientation[2])
}
注変数は& & FALSE_ROLLをFALSE_PITCH。私はOrientationSensorの中で以前のものと同じ出力を得るために、この値を "正規化"する方法(値は+10から-10まで異なります)を持っていません。
ロールを正規化する必要がない理由を説明してください。 – Matthias