intent.putExtraでMediaStore.EXTRA_OUTPUTを設定するとonActivityResultのIntentがnullになる問題

intentでカメラ起動後、撮影してからonActivityResultにて撮影された写真を利用しようとして相当詰まったのでメモ。

環境

Android API 15

問題

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, 100);

このような感じで実装していたところ、onActivityResultのIntentがnullになってしまった。
何やらカメラアプリの実装によって挙動が異なることが原因らしい……。

解決策

少々気持ち悪い気はするものの、intentの値がnullの場合に備えて、メンバ変数でfileUriを持っておくことにした。

この場合、

EXTRA_OUTPUTで指定した場所にとは違うところに画像を保存し、data.getData() で保存した画像のURIが取得できる

というパターンに対応出来ないが、そんな基地外地味た実装をしているAndroid端末のことなど知らぬ存ぜぬ。

参考

Android Camera : data intent returns null - Stack Overflow
Android アプリ始めてました。 - eXnetcom Blog