gpt4 book ai didi

android - 如何获取 Android 设备的当前方向 (ActivityInfo.SCREEN_ORIENTATION_*)?

转载 作者:IT老高 更新时间:2023-10-28 13:25:49 26 4
gpt4 key购买 nike

我想了解设备的详细方向,最好是 SCREEN_ORIENTATION_LANDSCAPESCREEN_ORIENTATION_PORTRAITSCREEN_ORIENTATION_REVERSE_LANDSCAPESCREEN_ORIENTATION_REVERSE_PORTRAIT 之一 来自 ActivityInfo 或等效项。

包括 StackOverflow 上的一些答案

getWindowManager().getDefaultDisplay().getRotation()

但这并不能真正告诉我设备是处于纵向还是横向模式,只能告诉我它是如何参照其自然位置转动的——这反过来又可以是横向或纵向。

getResources().getConfiguration().orientation

返回以下三个之一:ORIENTATION_LANDSCAPEORIENTATION_PORTRAITORIENTATION_SQUARE,这并不能真正告诉我手机的方向翻转(无论是倒置还是转向哪一侧)。

我知道我可以将后者与 DisplayMetrics 结合使用来找出设备的自然方向,但真的没有更好的方法吗?

最佳答案

我最终使用了以下解决方案:

private int getScreenOrientation() {
int rotation = getWindowManager().getDefaultDisplay().getRotation();
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
int orientation;
// if the device's natural orientation is portrait:
if ((rotation == Surface.ROTATION_0
|| rotation == Surface.ROTATION_180) && height > width ||
(rotation == Surface.ROTATION_90
|| rotation == Surface.ROTATION_270) && width > height) {
switch(rotation) {
case Surface.ROTATION_0:
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
break;
case Surface.ROTATION_90:
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
break;
case Surface.ROTATION_180:
orientation =
ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
break;
case Surface.ROTATION_270:
orientation =
ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
break;
default:
Log.e(TAG, "Unknown screen orientation. Defaulting to " +
"portrait.");
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
break;
}
}
// if the device's natural orientation is landscape or if the device
// is square:
else {
switch(rotation) {
case Surface.ROTATION_0:
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
break;
case Surface.ROTATION_90:
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
break;
case Surface.ROTATION_180:
orientation =
ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
break;
case Surface.ROTATION_270:
orientation =
ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
break;
default:
Log.e(TAG, "Unknown screen orientation. Defaulting to " +
"landscape.");
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
break;
}
}

return orientation;
}

注意:一些用户(下面评论中的 Geltrude 和 holtaf)指出,此解决方案不适用于所有设备,因为从自然方向旋转的方向未标准化。

关于android - 如何获取 Android 设备的当前方向 (ActivityInfo.SCREEN_ORIENTATION_*)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10380989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com