Мне нужно прочитать значение шага (насколько телефон наклонен вперед и назад) как в портретном, так и в ландшафтном режимах. Используя приведенный ниже код в портретной ориентации, я получаю свое значение из значения [1] с 0,0, когда телефон остается лежать ровно лицевой стороной вверх, -90, когда стоит вертикально, и 180, когда лежит на лицевой стороне устройства. Все отлично до сих пор ... Проблема возникает, когда устройство находится в ландшафтном режиме. На данный момент я использую значение [2] для измерения наклона устройства, но проблема связана со значениями: 0, когда телефон остается горизонтальным (ОК), поднимается до 90, когда он стоит вертикально (ОК), но когда я продолжаю при движении значение снова падает ниже 90 (80, 75 и т. д.), поэтому в основном я не могу различать эти 2 позиции, поскольку значения идентичны. Итак, что я делаю неправильно, какие еще значения с датчиков я могу прочитать, чтобы получить полную картину наклона устройства как в альбомном, так и в портретном режиме?
Тот же вопрос, что и здесь: http://groups.google.com/group/android-beginners/browse_thread/thread/c691bbac3e294c7c?pli=1
У меня есть следующий код:
private void ReadOrientationSensor(){
final SensorManager sensorManager;
final TextView text = (TextView) this.findViewById(R.id.TextView01);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
SensorEventListener listener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
float x,y,z;
x=event.values[0];
y=event.values[1];
z=event.values[2];
//text.setText(String.valueOf(event.values[0]));
text.setText("x: " + x + " y: " + y + " z: " + z);
}
};
sensorManager.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_FASTEST);
}