【android】intentの戻り値には、帰ってきた値に合わせて細かく切り分けて対応する

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>

 

 

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG