2013-12-11 82 views
0

我有一個母版的UI類,它有一個實例化一個實現SpeechRecognizer庫的類來轉換文本語音的類的按鈕。SpeechRecognizer類沒有得到結果?

btnSpeak = (ImageButton) findViewById(R.id.btnSpeak); 

     btnSpeak.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       startNoiseProcessService(); 
      } 
     }); 

startNoiseProcessService()是一個調用另一個類對象的函數。

public void startNoiseProcessService() { 

       StreamService ss = new StreamService(this); 
       String s = ss.startStreaming(); 
       if (s.equals("NA")) { 
        Toast t = Toast.makeText(getApplicationContext(),threadCnt + 
          "Opps! Your device doesn't support Speech to Text", 
          Toast.LENGTH_SHORT); 
        t.show(); 
      } 

} 

StreamService類實現SpeechRecognizer API

這StreamService類被調用完美罰款,問題在於我無法從onResults(Bundle)方法計算結果後的語音轉換文本。

我需要轉換的文本來更新我的文本框,我沒有得到它。

startStreaming()實現:基於您的評論

public String startStreaming() { 

      text = ""; 

      if (!SpeechRecognizer.isRecognitionAvailable(context)) { 
       text = "NA"; 
       return text; 
      } 

      Log.d(TAG, "started taking input"); 
      sr = SpeechRecognizer.createSpeechRecognizer(context); 

      Intent intent = new Intent(
        RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 


      intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US"); 
      intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3); 

      sr.setRecognitionListener(new mylistener()); 
      sr.startListening(intent); 

    } 
+0

當你調試你的代碼時,'onResults'永遠不會被調用?你在物理設備上測試這個嗎?你是否嘗試在聽衆的其他方法上加入斷點,以查看是否有其他方法被調用? –

+0

onResults方法正在調用,但此方法在另一個從UI類調用的類中。在調用此方法以在UI類中顯示結果時,我需要此方法的結果。 – Aki008

回答

1

,我想你不能有結果的時候sr.startListening(intent)被調用。您需要使用聽衆的方法onResults來獲得結果,並從那裏處理Bundle內部的文本。

我實施這個的方式是讓Service負責處理SpeechRecognizer。然後,當調用onResults時,我使用消息處理程序將文本發送回原始調用方。你可以在這裏看到如何做到這一點的細節:https://developer.android.com/training/multiple-threads/communicate-ui.html