【问题标题】:How to detect whether Android device is locked in portrait or landscape orientation如何检测Android设备是纵向还是横向锁定
【发布时间】:2019-04-24 20:37:33
【问题描述】:

如果在 Android 设备中自动旋转选项已关闭 - 我如何检查用户是否选择将设备锁定为纵向或横向模式?

我不能依赖用户更改设置时设备所处的实际方向 - 在某些设备(主要是手机)中,只有纵向锁定,即使设备处于横向,它也会打开.

我使用这段代码,但它仅在自动旋转打开或关闭时返回,而不是实际的锁定方向。

这适用于在 Unity 中开发的应用,因此我们将不胜感激 Unity 或 Android 原生建议。

谢谢!

private static bool DeviceAutoRotationIsOn()
{
    using (var actClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
    {
        var context = actClass.GetStatic<AndroidJavaObject>("currentActivity");
        var systemGlobal = new AndroidJavaClass("android.provider.Settings$System");
        var rotationOn = systemGlobal.CallStatic<int>("getInt",
            context.Call<AndroidJavaObject>("getContentResolver"), "accelerometer_rotation");

        return rotationOn == 1;
    }
}

【问题讨论】:

    标签: c# android unity3d


    【解决方案1】:

    如果您需要特定的方向,例如您的应用只需要纵向或横向,那么您可以使用 android:screenOrientation 在清单文件中设置它。

    【讨论】:

    • RANAJEET BARIK - 谢谢,但我需要同时支持纵向和横向(只要设备的自动旋转选项打开,它就可以正常工作)。我唯一的问题是确定用户在禁用自动旋转选项时锁定设备的方向,所以我也会将我的应用程序锁定在相同的方向。
    【解决方案2】:

    获取当前方向:

    科特林

    val display = (baseContext.getSystemService(Context.WINDOW_SERVICE) as WindowManager).defaultDisplay
    val rotation = display.rotation
    

    Java

    Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    int rotation = display.getRotation();
    

    结果可能是:

    Surface.ROTATION_0 
    Surface.ROTATION_90 
    Surface.ROTATION_180
    Surface.ROTATION_270
    

    横向 90 和 270

    0 和 180 用于纵向

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      相关资源
      最近更新 更多