あなたのアクティビティに対してOrientationEventListenerを有効にすることができます。
OrientationEventListener mOrientationListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) {
@Override
public void onOrientationChanged(int orientation) {
Log.v(TAG, "Orientation changed to " + orientation);
if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
return;
}
int degrees = -1;
if (orientation < 45 || orientation > 315) {
Log.i(TAG, "Portrait");
} else if (orientation < 135) {
degrees = 90;
Log.i(TAG, "Landscape"); // This can be reverse landscape
} else if (orientation < 225) {
degrees = 180;
Log.i(TAG, "Reverse Portrait");
} else {
degrees = 270;
Log.i(TAG, "Reverse Landscape"); // This can be landscape
}
}
};
if (mOrientationListener.canDetectOrientation() == true) {
Log.v(TAG, "Can detect orientation");
mOrientationListener.enable();
} else {
Log.v(TAG, "Cannot detect orientation");
mOrientationListener.disable();
}
私は解決策になる可能性があります。このリスナーは、オリエンテーションのデバイスが変更されたときに呼び出されるため、あまり消費することはありませんか?私のアプリケーションは永久にアクティブです。 –
これはあなたが望むように、システムトリガーです。角度が変わるたびに呼び出されます。オリエンテーションが完全に90度変化してこのリスナがトリガされるまで待機しません。だからそれはたくさん呼ばれています。これは、それらの "if-else"コントロールのポイントです。 – FatihC
あなたは正しいです。それはこの情報を得る唯一の方法だと思われます。ありがとう。 –