Androidの向きに問題があります。デバイスの向きは、AndroidManifest.xml ファイルで設定した横向きです。
android:screenOrientation="landscape"
また、私はデバイスを横向きに持っているので、すべて (レイアウト、ビューなど) は私が望んでいたように横向きモードになっています。ただし、デバイスを縦向きに持っている場合にのみ、必要な値が得られます。
インターネットからいくつかのコードを変更したところ、HTC 3d EVO、Nexus 7、Samsung Galaxy S3 では機能しますが、Galaxy Tablet 10 では機能しません。
この投稿を見つけました。 Androidの向きセンサーはデバイスごとに異なりますか? 受け入れられた答えは、 getRotation() および remapCoordinateSystem() メソッドを使用することを提案していますが、その方法については言及していません。
これが私が終わった方法です。
SensorManager.getRotationMatrix(Rmat, Imat, gData, mData);
SensorManager.remapCoordinateSystem(Rmat, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, R2);
// Orientation isn't as useful as a rotation matrix, but
// we'll show it here anyway.
SensorManager.getOrientation(R2, orientation);
float incl = SensorManager.getInclination(Imat);
FontTextView pitchText = (FontTextView)findViewById(R.id.pitch_text);
if((int)(orientation[1]*90) <= -110 && !newQuestionIsActive) {
newQuestionIsActive = true;
pitchText.setText("Bring new question");
}
else if(Math.abs((int)(orientation[2]*90)) <= 200 && (int)(orientation[1]*90) >= -30 && newQuestionIsActive) {
newQuestionIsActive = false;
pitchText.setText("Not Correct!");
}
else if(Math.abs((int)(orientation[2]*90)) > 200 && (int)(orientation[1]*90) >= -30 && newQuestionIsActive) {
newQuestionIsActive = false;
pitchText.setText("Congratulations!");
}
さて、このコードで getRotation() をどのように利用すればよいでしょうか? 上記の 3 つのデバイスは正常に動作するが、Galaxy タブレットでは動作しない理由を簡単に説明していただければ幸いです。
この問題について Android のドキュメントには次のように書かれています。
最後に、アプリケーションがセンサー データを画面上の表示と照合する場合は、getRotation() メソッドを使用して画面の回転を決定し、次に remapCoordinateSystem() メソッドを使用してセンサー座標を画面座標にマップする必要があります。マニフェストで縦向きのみの表示が指定されている場合でも、これを行う必要があります。
http://android-developers.blogspot.com/2010/09/one-screen-turn-deserves-another.html