获得旋转角度始终返回零

5

getRotation始终返回零,无论屏幕朝哪个方向。我在运行2.3的真实设备上运行此代码。有什么原因吗?

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

你使用的是什么设备? - Charles Munger
华为Y200。我相信它必须能够工作,因为默认的相机应用程序能够找出问题所在。 - Johann
我正在为同样的问题苦苦挣扎,无法弄清楚为什么getRotation()总是返回0。有人找到了解决方案吗?如果设备的自动旋转关闭(甚至打开),每次调用getRotation()函数都会得到0的结果(使用HTC One M8)。 - Cat
1个回答

9
getRotation只有在应用程序具有UI并且UI被允许旋转时才能正常工作。操作系统中有一个设置可以防止任何应用程序自动旋转:
设置 > 显示 > 自动旋转屏幕
这必须启用。在我的设备上,它是禁用的。然而,Android文档对于getRotation不仅没有指出这一点,甚至给出了这样的假设:即使没有UI,getRotation也会返回旋转值。你需要一个UI。当然,对于像服务这样没有UI但需要知道设备方向以完成与用户交互无关的任务的东西来说,这是个问题。就我个人而言,我对谷歌雇佣那些认为访问硬件功能几乎总是需要某种UI的业余程序员感到非常愤怒。这种问题已经多次出现,比如必须拥有SurfaceView才能录制视频。
最后,明显不需要使用getRotation来确定设备是否旋转了0度、90度、180度或270度。即使关闭了自动旋转屏幕,相机应用程序仍然能够确定角度旋转,因此不能从getRotation获取,除非它能够以某种方式打开自动旋转屏幕设置。

1
那么,你的解决方案是什么? - user5156016

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接