ブログ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を読み直す
といった所でしょうか。