我正在尝试编写一个.apk来测量一个android设备的屏幕旋转需要多长时间(通过几个旋转循环)。
我正在使用调用setRequestedOrientation()
将屏幕重新定向到4个位置(PORTRAIT
、LANDSCAPE
、REVERSE_PORTRAIT
和REVERSE_LANDSCAPE
)。
我的问题是我不知道什么时候轮换结束。我试过一些解决办法,但每个都有自己的问题。
我试图使用onConfigurationChanged()
。问题是,这种方法是在传感器发生方向变化时触发的,而不是从setRequestedOrientation()
触发的。实际上,在上一次调用setRequestedOrientation()
之后,我必须使用FULL_SENSOR
参数调用onConfigurationChanged
才能工作。
我试着通过添加while循环来检查屏幕方向(以度为单位),使setRequestedOrientation()
有点“阻塞”。我在setRequestedOrientation()
之前调用了android.view.Display.getRotation()
,并用while循环阻塞,直到它改变为止。不幸的是,它也不起作用。它在用户界面重新显示之前返回。
我试图通过等待再次调用setRequestedOrientation()
来跟踪活动的生命周期,以假设已完成旋转。以前,我一直循环直到计数器达到一个值,每次迭代都调用onCreate()
。在这个场景中,while循环变成一个if语句,我假设setRequestedOrientation()
每次都会调用函数,但是经过两次迭代之后onCreate
不会被调用。用户界面似乎也没有重新绘制。
我在网上找到的最后一个解决方案(但还没有完全实现)是在onCreate()
之后立即使用waitForIdleSync()
方法。setRequestedOrientation()
是instrumentation类的一部分,我认为这只是为了测试而不是标准的.apk。
任何想法都是非常受欢迎的。我非常感谢你的帮助。
最佳答案
您应该尝试使用:
http://developer.android.com/reference/android/view/OrientationEventListener.html
您需要先调用enable(),然后在设备发生每次旋转更改时收到通知。