首先,咱得先說下註意點: Android中主要通過RecognizerIntent來實現語音識別,其實代碼比較簡單,但是如果找不到設置,就會拋出異常 ActivityNotFoundException,所以我們需要捕捉這個異常。而且語音識別在模擬器上是無法測試的,因為語音識別是訪問google 雲端 ...
首先,咱得先說下註意點:
Android中主要通過RecognizerIntent來實現語音識別,其實代碼比較簡單,但是如果找不到設置,就會拋出異常 ActivityNotFoundException,所以我們需要捕捉這個異常。而且語音識別在模擬器上是無法測試的,因為語音識別是訪問google 雲端數據,所以如果手機的網路沒有開啟,就無法實現識別聲音的!一定要開啟手機的網路,如果手機不存在語音識別功能的話,也是無法啟用識別,我的話用的是那個科大的某某飛的語音軟體,一運行就可以自動調用這個軟體進行語音識別。
RecognizerIntent的一些Summary(在Android API中也可以查到):
下麵可以查下Android的這個類RecognizerIntent的用法,然後我們開始使用Intent傳遞消息
1 try{ 2 //通過Intent傳遞語音識別的模式,開啟語音 3 Intent intent=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 4 //語言模式和自由模式的語音識別 5 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 6 //提示語音開始 7 intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "開始語音"); 8 //開始語音識別 9 startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); 10 }catch (Exception e) { 11 // TODO: handle exception 12 e.printStackTrace(); 13 Toast.makeText(getApplicationContext(), "找不到語音設備", 1).show(); 14 }
作為一個使用的模塊使用。
- 主要是先使用
RecognizerIntent.ACTION_RECOGNIZE_SPEECH 開啟語音
- 然後在可以切換語音模式和自由模式
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
- 然後開始語音識別:
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
主要的過程就是如上所示了,自然還需要回調用戶語音的數據。
1 @Override 2 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 3 // TODO Auto-generated method stub 4 //回調獲取從google得到的數據 5 if(requestCode==VOICE_RECOGNITION_REQUEST_CODE && resultCode==RESULT_OK){ 6 //獲得語音輸入的字元 7 ArrayList<String> results=data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 8 //獲得需要的字元 9 String resultString=""; 10 for(int i=0;i<results.size();i++){ 11 resultString+=results.get(i); 12 } 13 Toast.makeText(this, resultString, 1).show(); 14 } 15 super.onActivityResult(requestCode, resultCode, data); 16 }
這樣的結合就可以實現語音識別了。