2013年5月16日木曜日

Android 音声入力を使う

こんにちは!

今回はAndroidアプリで音声入力を使う方法です。
私が作っているAndroidアプリ『検索の窓口』を使って記載していきます。

検索の窓口ではマイクボタンを押したら音声入力が始まるようになっています。


RecognizerIntentクラスを使用することで音声入力が出来るようになります。
音声入力は3GやらWi-Fiやらで通信接続が出来ていないと使えません。
通信が不安定だとエラーが発生するため、Try/Catchは使用してください。


~作成手順~
 1. 音声入力開始
 2. 結果の受け取り





1. 音声入力開始


マイクボタンが押されたら1行目のif文に入ります。(_btnVoiceが音声ボタンです)
クリックイベントは今回省略させてもらいます。
これで『お話ください』の画面が出るはずです。
if(v == _btnVoice){
 try {
  // インテント作成
  Intent intent = new Intent( RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
  intent.putExtra(
   RecognizerIntent.EXTRA_LANGUAGE_MODEL,
   RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
  intent.putExtra(
   RecognizerIntent.EXTRA_PROMPT, "お話ください");
                
  startActivityForResult(intent, REQUEST_CODE);
 }catch (Exception e){
  //エラー
  Toast.makeText(MainActivity.this, 
   "エラーが発生しました。", 
   Toast.LENGTH_LONG).show();
 }
}



2. 結果の受け取り


音声入力が正常に出来たら、結果が返ってきます。
※1で音声結果のリストを取得し、※2でリストのダイアログを表示しています。
選択された文字を、※3でテキストボックスに反映しています。

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
 try{
  //自分が投げたインテントであれば応答
  if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {           
   //結果文字列リストを取得 ※1
   ArrayList results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
   _voiceResult =  (String[])results.toArray(new String[0]); 
          
   //音声入力結果選択ダイアログ表示 ※2
   new AlertDialog.Builder(MainActivity.this)
   .setTitle("選択してください")
   .setItems(_voiceResult, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
    //テキストボックスに選択結果を反映 ※3
    _txtContent.setText(_voiceResult[which]);  
    }
   })
   .show();
  }
  super.onActivityResult(requestCode, resultCode, data);
 }catch(Exception e){
  Toast toast = Toast.makeText(this, "エラーが発生しました。", Toast.LENGTH_LONG);
  toast.show();
 }
 }

ちなみに、上で使っている_voiceResultは、メンバ変数として宣言しています。
private String[] _voiceResult;


以上で終わりです!(゚∀゚)


検索の窓口(アンドロイダー)
https://androider.jp/official/app/0f0d4638b01cfd49/

0 件のコメント:

コメントを投稿