2013/01/29

Android でカメラ撮影後メンバ変数が空になる。

理由はわかっていたんです。
カメラから戻ってくるときに onActivityResult が呼ばれるんですが、
そのまえに onCreate() が呼ばれている。要するに Activity が再生成されているから、
カメラ呼び出し前にメンバ変数セットしていようとも、もろともいなくなってしまったと。

以前にこんなのを書きました。
Android でカメラかギャラリーから画像を読み込んでトリミングして表示するサンプル
ただここに盲点が有りました。

Samsung Galaxy シリーズという盲点がぁがぁ・・・!!(大げさ)


※2013/01/30 21:33 追記
Google+ でご指摘頂きました。
Activity が破棄され、メンバ変数が初期化されてしまうような場合、
Activity#onSaveInstanceState(Bundle outState) で Bundle に メンバ変数として保持していた値を put() 。
その後復帰後に Activity#onRestoreInstanceState(Bundle savedInstanceState) で Bundle から 取り出して再度メンバに設定してあげるようです。

Activity のライフサイクル大事!!
ご指摘ありがとうございます!!

AndroidManifest にこう書いてます。

android:configChanges="keyboardHidden|orientation"
なにげにこれだけでも大抵動いちゃうんですよね。
HTC J butterfly HTL21 も特に問題ありませんでした。

ここで登場 Samsung Galaxy SIII SC-06D
いろいろテストしていく中で、写真を取る向きを検証していました 。
そして事は起こった。

この向き!端末の下を左に持ってきて写真を撮る。
この状態だと、configChanges の orientation には引っかからないようです。
他の3方向は問題なし。まあどうするかというと、 screenSize も追加しろと。
ここに書いてありました。
Handling the Configuration Change Yourself
http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange
Android 3.2 (API level 13) 以上を対象とする場合は、screanSize もまた変更されるようです(向き変わってるだけだろ・・・・・)。

というわけで Android Manifest にはこう書きます。screenSize 追加。


ちなみに、 GALAXY SII WiMAX ISW11SC でも同じ現象でした。