[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だけでいいんだけど、全部指定してみた)
Comments are currently closed.