2011-05-19 127 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