Android 使用传感器获取设备方向

标签 android android-service orientation android-sensors android-windowmanager

我正在开发应用程序,在服务类中我使用 WindowManager 来扩展 View 。所以通常 View 布局会根据设备方向改变其方向,但是当我打开我的相机应用程序时,方向不会改变。如下图所示:-

Figure 1

Figure 2

那么如何根据设备方向更改 View 方向。

谢谢

最佳答案

确定设备的自然方向是横向/纵向,还是确定应用的资源是否以横向/纵向呈现,两者之间存在差异。听起来你想要前者:

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

关于Android 使用传感器获取设备方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36998798/

相关文章:

android - 从服务器 [DF-AA-20] 检索信息时发生应用内购买错误

java - 我似乎无法通过我的 Android 应用程序连接到远程服务器

android - 在 string.xml 中定义时服务操作不起作用

android - 通过 Intent 启动 Android 服务与通过实例创建

ios - 如何在快速按下 Collection View 单元格时修复自定义 View 中的约束

ipad - UINavigationController 后退按钮一半适用于 iPad 横向

orientation - 比较 : TYPE_ROTATION_VECTOR with Complemenary Filter

android - Jetpack Compose BottomNavBar 标签重叠图标

android - iOS 中的 R.array.string 等价物

android - 我可以在 Android 服务中使用共享首选项吗?