2012年9月25日火曜日

[Android]startActivityForResultでカメラ起動後、アプリに戻ると変数の値がnullになってる現象

タイトル長くて分かりにくいですが、、

startActivityForResult でカメラ起動する
変数に値を保持。



カメラ撮影



onActivityResult でアプリに戻ってくる
変数の値がnullになっている



のような現象が発生しました。

スマートフォンで発生せず、タブレットで発生。
・スマートフォン(SC-04D、ISW11HT)
・タブレット(SC-01D)



ソース1:カメラ起動する


ContentValues values = new ContentValues();
   values.put(MediaStore.Images.Media.TITLE, filename);
   values.put(MediaStore.Images.Media.MIME_TYPE, Const.MIMETYPE_PNG);
   mImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
 
   // カメラ起動
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
startActivityForResult(intent, Const.REQUEST_CODE_CAMERA);

mImageUriにカメラ撮影したデータを保存するもらう。


ソース2:カメラからの戻り処理

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if(resultCode == RESULT_OK) {
Intent intent;
// カメラからの戻り処理
if(requestCode == Const.REQUEST_CODE_CAMERA){
Log.d(tag, mImageUri);
}
}
}
カメラから戻ったら、mImageUriをログ出力。




[原因]

タブレットを傾けていたのが、よろしくなかった模様。

カメラ起動元の画面はマニフェストで縦固定の指定をしていた。
android:screenOrientation="portrait"

カメラ起動後、縦⇔横回転が行われていたようで、
アプリに戻ってきたときに横 → 縦の処理が行われ、画面の再作成した。(と思う)
ここで変数が初期化されてしまった。


[対策]
マニフェストに以下を記述。
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|fontScale"

端末回転しても画面破棄しないようにする。
(orientationだけでいいんだけど、全部指定してみた)



0 件のコメント:

コメントを投稿