2012-10-26 98 views
5

我想写一个.apk来测量旋转Android设备的屏幕需要多长时间(通过几次旋转循环)。知道什么时候旋转完成使用setRequestedOrientation

我使用呼叫setRequestedOrientation()到reoriente在4个位置(PORTRAITLANDSCAPEREVERSE_PORTRAITREVERSE_LANDSCAPE)屏幕。

我的问题是我不能当转动完成告知。我尝试了一些解决方案,但每个解决方案都存在问题。

  1. 我试着用。问题在于当传感器发生方向改变时,此方法被触发,而不是从setRequestedOrientation()。其实,我调用setRequestedOrientation()FULL_SENSOR参数onConfigurationChanged我以前调用setRequestedOrientation()后,开始工作。
  2. 我曾试图使setRequestedOrientation()排序“阻塞”的,通过添加一个while循环来检查屏幕方向(度)。我在setRequestedOrientation()之前调用了android.view.Display.getRotation(),并使用while循环进行阻塞,直到它发生变化。不幸的是,它也不起作用。它在UI重新显示之前返回。
  3. 我曾试图按照活动的生命周期,通过等待onCreate()来再次调用,承担旋转已完成。以前,我一直在循环,直到我的计数器达到一个值,在每次迭代中调用setRequestedOrientation()。在这种情况下,我while循环if语句变成了,我认为onCreate会调用该函数每一次,但onCreate()没有得到几次迭代后调用。用户界面似乎也没有重新绘制。
  4. 我在网上找到的最终解决方案(但尚未完全实现)是在setRequestedOrientation()之后立即使用waitForIdleSync()方法。 waitForIdleSync()是Instrumentation类的一部分,我认为这只是用于测试而不是用于标准的.apk。

任何想法都会非常受欢迎。我将衷心感谢您的帮助。

回答

0

没有直接的方式知道何时setRequestedOrientation()通过Android API完成。要知道的唯一方法是在调用它之前以及在onCreate()中调用它之后检查当前的方向。

在你Activity类做:

long timeStamp; 

public void onCreate(Bundle savedInstanceState) { 
    if (savedInstanceState == null) { 
      timeStamp = System.currentTimeMillis();  
    } 
    else { 
      timeStamp = savedInstanceState.getLong("state_time_stamp"); 
    } 

    // For example, check how long it takes to switch from portrait to landscape. 
    // You can modify this part to check PORTRAIT, LANDSCAPE, REVERSE_PORTRAIT and REVERSE_LANDSCAPE. 
    final int orientation = getResources().getConfiguration().orientation;  
    if (orientation == Configuration.SCREEN_ORIENTATION_PORTRAIT) { 
      setRequestedOrientation(ActivityInfo.ORIENTATION_LANDSCAPE); 
      return; 
    } 

    // We will reach here only after setRequestedOrientation() is done 
    // and here's the time it took to change the orientation: 
    final long elapsedTime = System.currentTimeMillis() - timeStamp; 
} 

public void onSaveInstanceState(Bundle outState) { 
    outState.putLong("state_time_stamp", timeStamp); 
} 
相关问题