画面の向きに問題があります。基本的に私がやろうとしているのは、正確な画面の向き(逆の風景と逆の肖像画を含む)を決定することです。私はそれを私のためにやるために以下のメソッドを書いたが、私のトランスフォーマでは完全に動作するようだが、私がエミュレータで同じコードを開始すると、いくつかのことが混乱する。Android 2.2以降で画面の向きを検出する
基本的に何が起きているのかは、エミュレータではドキュメントに従ってランドスケープ(ROTATION_90)に切り替えると、逆のランドスケープになっているはずです(Androidドキュメントで説明されているようにROTATION_90デバイスは逆のポートレートです)。残念なことに何らかの理由でエミュレータで正常なランドスケープモードと思われます。
私の質問は、以下のこのコードが正しいことです。問題はそれにあります。あるいは、私はいくつかの他のパラメータを考慮していないかもしれません(例えば、エミュレータには加速度センサーがほとんどないなど)。
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
どのようなエラーメッセージが表示されているか教えてください。 logcatの出力とは何ですか? –