ブログBlog

カメラについての追加事項①

投稿日:2014年08月06日

布内です。

先々週にカメラ機能について書きましたが、あの後で問題が発覚しました。

問題①
カメラで撮影後にActivityに戻るタイミングで端末の向き(縦横)を変えるとエラーが発生する。

問題②
縦向きに撮影した写真が横向きに保存される。
(モデルFAR70A Androidバージョン3.2で発生)

無事に解決できたので説明していきますが、両方書くと長くなりそうなので問題①の説明だけします。
問題②についてはバージョン4以上だと発生しないみたいですし、次の機会にでも書きます。

問題①
先ず、端末の向きを変えると現在のActivityを破棄して、新しいActivityが呼びなおされます。
なので、本来ならカメラで撮影後、Activityに戻ってきてonActivityResultが呼び出されまが、Activityが破棄され、Uriが初期化されるので、Uri=nullとなりopenInputStreamでエラーになります。

対処方は下記のメソッドを使います。

onSaveInstanceState(Bundle outState)
Bundleにデータを保存。

onRestoreInstanceState(Bundle saveInstanceState)
Bundleからデータの呼び出し。Activityの状態を復元するときに呼ばれる。

これらのメソッドを実装する時はこうなります。

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
onState.putParcelable(“Key”,uri);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
ImageUri = (Uri)savedInstanceState.get(“Key”);
}

後、画面遷移に呼ばれるメソッドについて調べてる方がいたので、URLを貼っておきます。
http://kokufu.blogspot.jp/2011/03/activity.html

向きを変えるときの処理は

onSaveInstanceState

onPause

onStop

onDestroy

onCreate

onStart

onRestoreInstanceState

onResume

のようです。

Activityに戻ってくる

onSaveInstanceStateでuriを保存

onDestroyでActivity破棄

onCreateでActivity生成

onRestoreInstanceStateでuriを読み直す

といった所でしょうか。

PAGE TOP