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 対応