getRotation
始终返回零。我在运行2.3的真实设备上运行它。有什么理由吗?
Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
答案 0 :(得分:7)
getRotation仅在应用程序具有UI且允许UI旋转时才有效。操作系统有一个设置可以阻止任何应用程序自动旋转:
设置>显示>自动旋转屏幕
必须启用此功能。在我的设备上它已被禁用。尽管如此,getRotation上的Android文档不仅没有指出这一点,甚至还假设即使没有UI,getRotation也会返回旋转。你需要一个UI。这当然是类似于没有UI但需要知道设备方向的服务的问题,其目的与用户交互无关。就我个人而言,我一直很生气,因为招聘那些认为访问硬件功能几乎总是需要某种UI的业余程序员。许多场合都出现了这种问题,比如必须使用SurfaceView来录制视频。
最后,应用程序显然不需要getRotation来确定设备是旋转0度,90度,180度还是270度。关闭自动旋转屏幕后,默认的相机应用程序仍然可以计算角度旋转,因此它不能来自getRotation,除非它能以某种方式打开自动旋转屏幕设置。