Android SpeechRecognizer不会注意到麦克风输入

问题描述:

我有一个问题,我的Android应用程序。我的设备是Vuzix M300,我试图让语音控制工作。 我的问题是,当我初始化我的SpeechRecognizer并调用startListining方法时,一切都运行,期望没有语音被识别。我已经尝试了相同的代码在Android手机上工作得很好。Android SpeechRecognizer不会注意到麦克风输入

这里是我的代码:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //grant access to internet 
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 
    //set layout 
    setContentView(R.layout.activity_main); 

    speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this); 
    speechRecognizerIntent = new Intent(RecognizerIntent.ACTION_VOICE_SEARCH_HANDS_FREE); 
    speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getApplication().getPackageName()); 
    speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "de-DE"); 
    speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, false); 

    speechRecognizer.setRecognitionListener(prepareRegnitionListener()); 
    speechRecognizer.startListening(speechRecognizerIntent); 
    //startListening(0); 
} 

private RecognitionListener prepareRegnitionListener() { 
    // TODO Auto-generated method stub 
    return new RecognitionListener() { 

     @Override 
     public void onRmsChanged(float rmsdB) { 
      //Didn´t use 
     } 

     @Override 
     public void onResults(Bundle results) { 
      ArrayList<String> matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
      Log.d(MainActivity,"Completed speech recognition: Result: " + matches); 
      String match = matches.get(0); 
     } 

     @Override 
     public void onReadyForSpeech(Bundle params) { 
      Log.d(MainActivity, "ReadyforSpeech"); 
     } 

     @Override 
     public void onPartialResults(Bundle partialResults) { 
      // Nothing 
      ArrayList<String> matches = partialResults.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
      Log.d(MainActivity,"Completed speech recognition: Result: " + matches); 
     } 

     @Override 
     public void onEvent(int eventType, Bundle params) { 
      // Nothing 

     } 

     @Override 
     public void onError(int error) { 
      switch (error){ 
       case SpeechRecognizer.ERROR_AUDIO: 
        Log.e(MainActivity,"Failed to recognize speech: Audio recording error."); 
        startListening(1000); 
        break; 
       case SpeechRecognizer.ERROR_CLIENT: 
        Log.e(MainActivity,"Failed to recognize speech: Insufficient permissions."); 
        startListening(1000); 
        break; 
       case SpeechRecognizer.ERROR_NO_MATCH: 

        Log.d(MainActivity,"Failed to recognize speech: No recognition results matched. Retrying..."); 
        startListening(1000); 
        break; 
       default: 
        Log.e(MainActivity,"Failed to recognize speech. Unknown error" + error); 
        startListening(1000); 

      } 


     } 

     @Override 
     public void onEndOfSpeech() { 
      Log.d(MainActivity, "EndofSpeech"); 
     } 

     @Override 
     public void onBufferReceived(byte[] buffer) { 
      //Didn´t use 

     } 

     @Override 
     public void onBeginningOfSpeech() { 
      Log.d(MainActivity, "beginnofSpeech");//Do something when speaking starts 
     } 
    }; 
} 

private void startListening(int delay){ 
    if(delay > 0){ 
     Timer t = new Timer(); 
     t.schedule(new TimerTask(){ 

         @Override 
         public void run() { 
          mainHandler.post(new Runnable() { 

           @Override 
           public void run() { 
            speechRecognizer.startListening(speechRecognizerIntent); 
            Log.d(MainActivity,"Start delayed listening to speech"); 
            speechRecognizer.stopListening(); 
           } 
          }); 

         }} 
       , delay); 
    }else{ 
     speechRecognizer.startListening(speechRecognizerIntent); 
     Log.d(MainActivity,"Start instant listening to speech."); 
    } 


} 

我运行的是VUZIX与Android 6和VUZIX固件1.2(最新版)。

我得到错误代码ERROR_SPEECH_TIMEOUT就像我会得到,如果没有语音输入(但我给)。

我已经试过几件事情就像使用startActivityForResult方法获取语音控制运行(具有相同的结果...)

+0

尝试DroidSpeech,这需要照顾所有繁重的工作,并且它很容易实现 - https://github.com/vikramezhil/DroidSpeech –

你必须设置权限为您的应用程序和手动为谷歌的APK,之后它在我的应用程序中使用Google语音识别器工作。