У меня есть некоторые проблемы с ориентацией экрана. В основном я пытаюсь определить точную ориентацию экрана (включая обратный пейзаж и обратный портрет). Я написал метод ниже, чтобы сделать это для меня, и, похоже, он отлично работает на моем Transformer, однако, когда я запускаю тот же код на эмуляторе, некоторые вещи запутаны.Определить ориентацию экрана в Android 2.2+
В основном то, что происходит в эмуляторе, я переключаюсь на пейзаж (ROTATION_90) в соответствии с документацией, он должен быть обратным пейзажем (и, например, на Transformer с ROTATION_90 устройство находится в обратном портрете, как описано в документации для Android). К сожалению, на эмуляторе почему-то кажется нормальным ландшафтным режимом.
Так что мой вопрос в том, что этот код ниже правильной проблемы. Или, возможно, я не принимаю во внимание некоторые другие параметры (например, эмулятор имеет едва акселерометр, например).
public static int getDeviceCurrentOrientation() {
WindowManager lWindowManager = (WindowManager) getContext()
.getSystemService(Activity.WINDOW_SERVICE);
Configuration cfg = getContext().getResources().getConfiguration();
int lRotation = lWindowManager.getDefaultDisplay().getRotation();
int rotation1;
int orientation;
rotation1 = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
if (cfg.orientation == Configuration.ORIENTATION_LANDSCAPE)
rotation1 = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
else if (cfg.orientation == Configuration.ORIENTATION_PORTRAIT)
rotation1 = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
else
rotation1 = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
switch (lRotation) {
case Surface.ROTATION_0:
orientation = 0;
break;
case Surface.ROTATION_90:
orientation = 1;
break;
case Surface.ROTATION_180:
orientation = 2;
break;
case Surface.ROTATION_270:
orientation = 3;
break;
default:
orientation = -1;
}
if ((orientation == 0)
&& (rotation1 == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE))
return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
if ((orientation == 0)
&& (rotation1 == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT))
return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
if ((orientation == 1)
&& (rotation1 == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT))
return ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
if ((orientation == 1)
&& (rotation1 == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE))
return ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
if ((orientation == 2)
&& (rotation1 == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT))
return ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
if ((orientation == 2)
&& (rotation1 == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE))
return ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
if ((orientation == 3)
&& (rotation1 == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT))
return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
if ((orientation == 3)
&& (rotation1 == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE))
return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
}
я, вероятно, следует также добавить, что я знаю, что я испортил с именами ориентации и ротации переменные :-) Также и эмулятор, и мой планшет работают с Android 4.0.3 – alter83
Хорошо, на эмуляторе я только что попробовал API 8 и API 10. С 2.2 на эмуляторе этот код работал, как и предполагалось, однако 2.3.3 вызвал те же проблемы – alter83
You haven 't сказал нам, какое сообщение об ошибке вы получаете. Что такое вывод logcat? –