2011-05-19 126 views
0

我正在使用Android語音識別意圖,但我想知道用戶設置了什麼語言來進行識別。 RecognizerIntent上的文檔暗示您可以從意圖數據中獲得此信息,但我一直收到空。Android語音識別 - 使用語言

這些值在調用意圖時可用嗎?是否有另一種獲取這些數據的方法?

下面是如何調用的意圖:

private void startVoiceRecognitionActivity() { 
    Logger.i(AppConfig.LOGTAG, "startVoiceRecognitionActivity"); 
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "speech recognition demo"); 
    startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); 
} 

而我得到的結果是這樣的:

/** 
* Handle the results from the recognition activity. 
*/ 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { 

    Logger.i(AppConfig.LOGTAG, "EXTRA_LANGUAGE = "+data.getStringExtra(RecognizerIntent.EXTRA_LANGUAGE)); 
    Logger.i(AppConfig.LOGTAG, "EXTRA_LANGUAGE_MODEL = "+data.getStringExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL)); 
    Logger.i(AppConfig.LOGTAG, "EXTRA_LANGUAGE_PREFERENCE = "+data.getStringExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE)); 

    } else { 
    Toast.makeText(getApplicationContext(), "Voice recognition failed.", Toast.LENGTH_LONG).show(); 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

回答

1

看來你需要發送一個廣播要問什麼語言是在配置語音識別。所以,序列是

  • 調用ACTION_RECOGNIZE_SPEECH意圖。
  • 收到對此Intent的響應後,廣播ACTION_GET_LANGUAGE_DETAILS意圖。
  • 收到此廣播請求的回覆後,您可以處理原始Intent返回的文本。下面

代碼:

/** 
* Handle the results from the recognition activity. First thing to do is 
* to get the language... 
*/ 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { 

    Intent intent = new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS); 
    LangBroadcastReceiver myBroadcastReceiver = new LangBroadcastReceiver(this, data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)); 
    sendOrderedBroadcast(intent, null, myBroadcastReceiver, null, Activity.RESULT_OK, null, null); 

    } else { 
    Toast.makeText(getApplicationContext(), "Voice recognition failed.", Toast.LENGTH_LONG).show(); 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 



/** 
* After a voice recognition is performed, need to sent a broadcast to 
* request the language used. This BroadcastReceiver gets the response and 
* then processes the original recognisedText from the 
* ACTION_RECOGNIZE_SPEECH Intent. 
* 
*/ 
public class LangBroadcastReceiver extends BroadcastReceiver { 
    ArrayList<String> recognisedText; 
    Activity parentActivity; 

    /** 
    * Store these for later use... 
    * @param activity 
    * @param arrayList 
    */ 
    LangBroadcastReceiver(Activity activity, ArrayList<String> arrayList) { 
    recognisedText = arrayList; 
    parentActivity = activity; 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    Bundle results = getResultExtras(true); 
    String lang = results.getString(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE); 
    Log.d(AppConfig.LOGTAG, "MyBroadcastReceiver: Got 'EXTRA_LANGUAGE_PREFERENCE' = " + lang); 
    // now handle the recognisedText with the known language. 
    } 

}

+0

我試着用所提出的解決方案,但似乎不起作用:顯示的使用語言總是設備和從來沒有的默認語言語言由'EXTRA_LANGUAGE'選項設置。爲什麼? – enzom83 2012-03-11 23:19:20