intentで何かの処理をした結果は、コールバックであるonActivityResultの引数として
返ってきます。この中のrequestCodeとresultCodeの内容に合わせて処理を分けていくのですが、
例えばカメラで撮った画像を受け取りたい場合は下記のようにかきます。
if(requestCode == RESULT_CAMERA && resultCode == RESULT_OK)
左辺がカメラモードに入った状態、右辺がカメラが正常に終了した状態。
この条件が二つ合った場合のみ処理に入っていきます。
ギャラリーの場合も同じように
<pre>if(requestCode == REQUEST_GALLERY && resultCode == RESULT_OK)</pre>
と書いていきます。requestCodeの判定だけでは縛りが甘く、リクエストした
結果が得られない時があります。
例えば、カメラモードに入って何も撮影せずに戻ろうとした時。
上のカメラ撮影処理において、条件がrequestCode == RESULT_CAMERAのみ
だった場合、本来ならば戻る=resultCode==RESULT_CANCELと決まっているのですが
条件が一つだけなので、カメラ撮影が成功したと判断されその下の処理へと
走ってしまいます。すると当然Uriが存在しないので何もない状態のimageViewを
返してしまう羽目になるのです。
自分の場合は条件がrequestCode == RESULT_CAMERAのみで、更に関数にvoidが
ついているにも関わらず分岐の中でreturnを使った処理を付けてそのままにしておいた
ためカメラモードで戻るを押した際にimageviewが消失する事故が起きました。
(恥ずべき間違いとは言えない)
この沼にはまると結構な時間を取られてしまうので注意したいですね。
onActivityResultで結果を受け取る際はresultCodeの結果もチェックして
処理を書いていきましょう。
下記テンプレコード
<pre>@Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == RESULT_CAMERA && resultCode == RESULT_OK) { //カメラの処理</pre> <pre> } else if(requestCode == REQUEST_GALLERY && resultCode == RESULT_OK){ //ギャラリーの処理</pre> <pre> } else if(resultCode == RESULT_CANCELED){ ※カメラ・ギャラリーモードがキャンセルされた時(重要) } } } </pre>