2012-02-06 11 views
0

私のAndroidアプリケーションに質問があります。 私の主な活動では、アクティビティB、私はカメラの向きをonResume()でディスプレイと同じに設定しました。それは、活動Bに行く前に が、私は別の活性を有する(アクティビティAと)、それはカメラの向きがここ 前のアクティビティのonStopが呼び出された後、カメラの向きがデフォルトに戻ります

が流れているAさんonStop()デフォルトのそれのコールアクティビティに戻って次のようになります。

Activity A onCreate() 
Activity A onResume() 
Activity A onPause() 
Activity B onCreate() 
Activity B onResume() 
    set mCamera.setDisplayOrientation(result); 
----> set properly, i can see the good orientation about 1-2 ms. 
Activity A onStop() 
----> camera orientation goes to default. 
----> If i didn't do anything here, device will sleep, once i wake up, i can get the camera orientation i want 
Activity B onPause() --> due to device sleep 
Activity B onResume() ---> because I turn on back device 
    set mCamera.setDisplayOrientation(result); 
---> camera orientation is good now 

私の質問は "以前のアクティビティのonStop()は設定を元の状態に戻すように設定する方法を設定する方法は?"

私はアンドロイドを追加しました:私の活動のBのマニフェストファイルでalwaysRetainTaskStateは=「true」と、それは事前に

おかげで働いていません。

答えて

0

オリエンテーションが設定された後、アクティビティBのsharedPreferencesにブール値を維持します。 Falseは1つの方向を意味し、trueは別の方向を意味することができます。次に、アクティビティBのonResumeのブール値をチェックすることができます。この方法では、アプリ内のアクティビティまたはメモリから消去されるデータ間の方向を維持できます。

注:任意のプリミティブデータと文字列をsharedPreferencesに保存できます。私はちょうど2つの状態を保存する必要があったので、ブール値を選択しました。

+0

私のオリエンテーションは、アクティビティB自体のonResume()に設定されています。 http://developer.android.com/reference/android/app/Activity.html#ConfigurationChangesによれば、 が指定されていない限り、設定の変更(画面の向き、言語、入力デバイスの変更など) )は、あなたの現在のアクティビティを破壊し、onPause()、onStop()、およびonDestroy()の通常のアクティビティライフサイクルプロセスを適宜実行します。 このアクティビティのonStop()が呼び出されると、カメラの向きがデフォルトになりました。 – Ronald

+0

@ user1193079はい、わかります。起こっていることは、向きを設定するために使用する結果変数がメモリから消去されている(またはアクティビティAのonStopが呼び出された後に誤った値に設定されている可能性がある)ため、デフォルト値とデフォルトの向きに戻ります。アクティビティー間で値を維持するには、永続ストレージを使用して方向を保管する必要があります。 onResume()では、永続ストレージ(sharedPreferencesの推奨)をチェックし、その値に基づいて方向をリセットする必要があります。 – onit

+0

私はこの問題の根本的な原因を発見しました。これはonPreviewFrame(byte []、Camera)で渡されたバイト配列の順序、JPEG画像、または記録されたビデオには影響しません。私はこの問題の真の根本原因を発見しました。 – Ronald

関連する問題