Intent によるActivity 呼び出しと戻り値の取得

Intent によるActivity 呼び出しと戻り値の取得

アプリの音声入力を実装
Android の音声入力はIntent により呼び出し可能な独立したアプリとして実装されており
これを呼び出すことで音声を認識し
認識した結果を取得できる

Android Activity は
必要に応じて呼び出 し元Activity に戻り値を返却することができる

Intent により、他のActivity を呼び出し
その戻り値を取得するには
Activity のstartActivityForResult()を使う

とくに戻り値を要求しないなら
Activity の startActivity() のほうを使えばいい

startActivityForResult()は
intent
これはActivity を呼び出すためのIntent

requestCode
これは、リクエストID
という引数になっている

音声処理を始めるのは
追加ボタンを押したときなので
case R.id.add:
listAdapter.add(“追加”);
のところへ追加する

とりあえず、解説を先にメモ

アプリから別のActivity つまり画面を呼び出す
この処理は
同一のアプリでも、別のアプリでもやり方は一緒

構文は

Intent intent = new Intent();

try{
  startActivityForResult(intent , REQUEST_ID);
}
catch(ActivityNotFoundException e){
  //指定したActivity が存在しないときに起こる例外処理
e.prinstackTrace();
}

となる

REQUEST_ID は
Intent
呼び出しを識別するたのID

戻り値を取得するために使うので
あらかじめ定数としておくのが一般的

Intent が暗黙的Intent の場合
Intent が示すActivity を system が発見できないため
ActivityNorFoundException が発生する

呼び出し元Activity が確実に存在する場合
つまり同じアプリの中のActivity 呼び出しとかなら
いらないけど
そんな都合のいいことばかりじゃないので
ActvityNorFooundException が発生する前提でアプリを作成すること

次にActivity の戻り値の取得について
startActivityForResult() でActivity を呼び出した場合
呼び出した Activity が閉じると
呼び出し元、つまり今のActivity の
onActivityResult() が呼び出される

ソースにすると

@Override
public void onActivityResult(int requestCode, int resultCode, intent data){
if(requestCode == REQUEST_ID &&  resultCode == RESULT_OK){
.....
}
super.onActivityResult(requestCode,resultCode,data);
}

となる

この引数の意味は
requestCode
onActivityForResult() で指定した値が格納される

resultCode
Activity が閉じたときの終了コード
Activity クラスの定数である
RESULT_OK
RESULT_CANCEL
RESULT_FIRST_USER
のどれかが格納される
これらの意味は
RESULT_OK
処理が正常終了

RESULT_CANCEL
処理がキャンセルされた

RESULT_FIRST_USER
その他の動作

という意味になる

data
これは、Activity が設定した戻り値を示すIntent オブジェクトを格納

となる

このため

if(requestCode == REQUEST_ID &&  resultCode == RESULT_OK){


requestCode が目的のIDで
resultCode が RESULT_OK
のときだけ処理するという判定になる

ちなみに、自作した Activity の戻り値をかえすようにするには
Activity Object の setResult() を使う

構文は

public final void setResult(int resultCode Intent data);

となる

この時の引数の意味は
resultCode
Activity の処理結果
onActivityResult() のresultcode 対応

data
Activity の処理結果を示すIntent
onActivityResult のdata 対応

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です