현재 'Sensor.TYPE_ORIENTATION'이 (가) 사용되지 않으므로 대신 교체하려고합니다. 그래서 Android Documentation에는 정보의 대부분이 부족합니다. 디버깅과 여기에 SO에 diggin 동안 나는 한 번 OrientationSensor에 의해 제공된 azimuth
을 계산하는 방법을 알아 냈습니다. 나는이 방법으로 수행SensorManager.getOrientation()을 사용하여 "Pitch"및 "Roll"을 계산하는 방법
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. 나는 오리엔테이션 센서 내에서 이전과 같은 출력을 얻기 위해이 값을 "정상화"(값이 +10에서 -10까지 차이가 있음)하는 방법을 모른다.
롤을 표준화 할 필요가없는 이유를 설명해주십시오. – Matthias