n справочных страниц для android.view.onSensorChanged () Оси устройства описаны как
"Ось X относится к горизонтальной оси экрана (маленький край в портретном режиме, длинный край вландшафтный режим) и указывает вправо. Ось Y относится к вертикальной оси экрана и указывает на верхнюю часть экрана (начало координат находится в нижнем левом углу). Ось Z указывает на небо, когда устройство находитсяна спине на столе. "
и в android.hardware.SensorManager.getOrientation () упоминается, что метод вернет азимут, шаг и поворот устройства, которые положительны в направлении против часовой стрелки.направление.Но когда я вызывал функцию из своего кода и печатал значения, азимут и шаг были положительными в направлении по часовой стрелке и отрицательными в направлении против часовой стрелки.Матрица вращения, полученная android.hardware.SensorManager.getRotationMatrix (), отвечает требованиям, если то, что я утверждаю, является правильным, то есть азимут и высота тона + ve в направлении по часовой стрелке и крен + ve в против часовой стрелкинаправление.Пожалуйста, поправьте меня, если я ошибаюсь.Я использую HTC Wildfire S, который работает на Android 2.3.3.
Я добавляю сегмент кода, который я использую для получения значений ориентации.
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) );
Пожалуйста, дайте мне знать, если я пропустил упоминание любой необходимой информации.Заранее спасибо.