如何检测Android设备是否锁定为纵向或横向

时间:2019-04-24 11:14:33

标签: c# android unity3d

如果在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;
    }
}

2 个答案:

答案 0 :(得分:0)

如果您的应用需要特定的方向(例如仅纵向或横向),则可以使用android:screenOrientation在清单文件上进行设置。

答案 1 :(得分:0)

要获取当前方向:

科特琳

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(纵向)