6

Android デバイスの画面を回転させるのにかかる時間を測定するために .apk を作成しようとしています (いくつかの回転をループします)。

の呼び出しを使用して、4 つの位置 ( 、、および)setRequestedOrientation()で画面の向きを変更しています。PORTRAITLANDSCAPEREVERSE_PORTRAITREVERSE_LANDSCAPE

私の問題は、ローテーションがいつ終了したかがわからないことです。いくつかの解決策を試しましたが、それぞれに問題があります。

  1. 使ってみましたonConfigurationChanged()。問題は、向きの変化が からではなくセンサーから発生したときに、このメソッドがトリガーされることsetRequestedOrientation()です。への前回の呼び出しの後に機能させるには、実際にはパラメーターを使用して呼び出す必要setRequestedOrientation()がありFULL_SENSORます。onConfigurationChangedsetRequestedOrientation()
  2. setRequestedOrientation()画面の向き (度単位) を確認する while ループを追加して、一種の「ブロッキング」を試みました。android.view.Display.getRotation()以前に呼び出しsetRequestedOrientation()て、変更されるまで while ループでブロックしました。残念ながら、それも機能しません。UI が再表示される前に戻ります。
  3. onCreate()ローテーションが完了したと仮定して、再度呼び出されるのを待つことで、アクティビティのライフサイクルをたどろうとしました。以前は、各反復で を呼び出して、カウンターが値に達するまでループしていましたsetRequestedOrientation()。このシナリオでは、while ループが if ステートメントになり、onCreate毎回関数を呼び出すと仮定しますがonCreate()、数回の反復後に呼び出されません。UIも再描画されていないようです。
  4. 私がオンラインで見つけた最終的な解決策 (ただし、完全には実装できていません) は、 のwaitForIdleSync()直後にメソッドを使用することsetRequestedOrientation()です。waitForIdleSync()は Instrumentation クラスの一部ですが、これはテスト用に作成されたものであり、標準の .apk 用ではないと思います。

どんなアイデアでも大歓迎です。よろしくお願いします。

4

2 に答える 2

0

使用してみてください: http://developer.android.com/reference/android/view/OrientationEventListener.html

最初に enable() を呼び出す必要があります。その後、デバイスのすべてのローテーション変更について通知を受けます。

于 2013-01-27T08:12:26.563 に答える