Моя деятельность заблокирована на LANDSCAPE. Но все же мне нужно знать ориентацию устройства. Поэтому я решил использовать датчики. У меня есть следующий кодКак определить ориентацию устройства с датчиков
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_NORMAL);
...
@Override
public void onSensorChanged(SensorEvent event) {
float[] values = event.values;
// Movement
float azimuth = values[0];
float pitch = values[1];
float roll = values[2];
if ((-110 <= pitch && pitch <= -70) || (70 <= pitch && pitch <= 110)) {
//PORTRAIT MODE
portraitPitch = true;
landscapePitch = false;
Log.d(TAG, "portrait mode: pitch = " + pitch);
} else if ((-20 <= pitch && pitch <= 20) || (-200 <= pitch && pitch <= -160) || (160 <= pitch && pitch <= 200)) {
//LANDSCAPE MODE
portraitPitch = false;
landscapePitch = true;
Log.d(TAG, "landscape mode : pitch = " + pitch);
}
if ((-20 <= roll && roll <= 20)) {
//PORTRAIT MODE
portraitRoll = true;
landscapePitch = false;
Log.d(TAG, "portrait mode: roll = " + roll);
} else if ((-110 <= roll && roll <= -70) || (70 <= roll && roll <= 110)) {
//LANDSCAPE MODE
portraitRoll = false;
landscapePitch = true;
Log.d(TAG, "landscape mode : roll = " + roll);
}
if (portraitPitch && portraitRoll && !portrait) {
portrait = true;
landscape = false;
rotateIconsToPortraitMode();
Log.d(TAG, "portrait mode for icons: pitch = " + pitch + ", roll = " + roll);
}
if (landscapePitch && landscapeRoll && !landscape) {
landscape = true;
portrait = false;
rotateIconsToLandscapeMode();
Log.d(TAG, "landscape mode for icons: pitch = " + pitch + ", roll = " + roll);
}
}
Мой код не работает надежно, на самом деле, otateIconsToLandscapeMode()
никогда не достигается.
Как использовать информацию о azimuth
, pitch
и roll
определить портретную или альбомную ориентацию устройства? ` Я надеюсь, что мой вопрос достаточно конкретен, чтобы гарантировать конкретный ответ. Благодарю.
Вы пытались самостоятельно изменить конфигурацию? http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange - добавьте 'configChanges: orientation' для манифестации и реализуйте' onConfigurationChanged', тогда, возможно, вы можете получить 'newConfig.orientation' – wasyl
Это не работает. Когда ориентация заблокирована, событие изменения конфигурации не имеет смысла. Вы должны использовать датчик. –
Тогда я бы предложил http://stackoverflow.com/questions/27614439/how-to-detect-my-screen-orientation-in-portrait-locked-screen-in-android – wasyl