Android 使用传感器获取设备方向
Android Get Device Orientation Using Sensons
我正在开发服务中的应用程序 class 我使用 WindowManager 来扩展视图。所以通常视图布局会根据设备方向改变其方向,但是当我打开我的相机应用程序时,方向不会改变。如下图所示:-
那么如何根据设备方向更改视图方向。
谢谢
确定您的设备的自然方向是 landscape/portrait 还是您的应用资源是否以 landscape/portrait 呈现是有区别的。听起来你想要前者:
int getNaturalOrientation() {
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display defaultDisplay = windowManager.getDefaultDisplay();
int rotation = defaultDisplay.getRotation();
if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) {
if (display.getDisplayHeight() >= display.getDisplayWidth()) {
return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
} else {
if (display.getDisplayHeight() < display.getDisplayWidth()) {
return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
}
}
~受 Chromium src 中的代码启发:https://chromium.googlesource.com/chromium/src/+/aca91b5d8a53d77e98021d560305a996864df5e8/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationListenerTest.java
我正在开发服务中的应用程序 class 我使用 WindowManager 来扩展视图。所以通常视图布局会根据设备方向改变其方向,但是当我打开我的相机应用程序时,方向不会改变。如下图所示:-
那么如何根据设备方向更改视图方向。
谢谢
确定您的设备的自然方向是 landscape/portrait 还是您的应用资源是否以 landscape/portrait 呈现是有区别的。听起来你想要前者:
int getNaturalOrientation() {
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display defaultDisplay = windowManager.getDefaultDisplay();
int rotation = defaultDisplay.getRotation();
if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) {
if (display.getDisplayHeight() >= display.getDisplayWidth()) {
return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
} else {
if (display.getDisplayHeight() < display.getDisplayWidth()) {
return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
}
}
~受 Chromium src 中的代码启发:https://chromium.googlesource.com/chromium/src/+/aca91b5d8a53d77e98021d560305a996864df5e8/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationListenerTest.java