2016-05-14 91 views
3

我正在嘗試使語音驅動的應用程序,但是我遇到了一個主要問題。

My UtteranceProgressListener無論我在哪裏放置Speak方法,Class都不會調用任何給定的方法。UtteranceProgressListener不會調用函數

這裏是我的代碼:

這是我的onCreate方法:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mContext = this; 
    voiceBtn = (Button) findViewById(R.id.startListeningBtn); 

    voiceBtn.setEnabled(false); 
    textToSpeech = new TextToSpeech(mContext,new botListener()); 

    }  

這是OnInitListner Imeplementation

public class botListener implements TextToSpeech.OnInitListener{ 
    @Override 
    public void onInit(int i) { 

     if(i == TextToSpeech.SUCCESS) 
     { 
      int s = textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() { 
      @Override 
      public void onStart(String s) { 
       Toast.makeText(getApplicationContext(),"Done Speaking",Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onDone(String s) { 
       Toast.makeText(getApplicationContext(),s,Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onError(String s) { 
       Toast.makeText(getApplicationContext(),"Done Speaking",Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     Log.d(TAG,String.valueOf(s)); 

      int result = textToSpeech.setLanguage(Locale.ENGLISH); 

      if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED){ 
       Log.e(TAG,"Language not supported"); 
       Intent installLanguage = new Intent(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
       startActivity(installLanguage); 
      } 
      Log.d(TAG,"Started Voice Speaker"); 
     } 
     else{ 
      Log.e(TAG,"initialization failed"); 
     } 
    } 
} 

現在,當我按下按鈕,發生的事件是:

public void initVoiceRecog(View v){ 
    //Toast.makeText(mContext,"Clicked",Toast.LENGTH_SHORT).show(); 
    Speak("hello","1"); 
    // does some other things here after that 

} 

private void Speak(String text,String identifierID){ 

    if(Build.VERSION.SDK_INT>21) { 
     Bundle params = new Bundle(); 
     params.putString(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,identifierID); 
     textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, params, identifierID); 
    } 
    else{ 
    // ttsMap is a HashMap 
    ttsMap.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,identifierID); 
    textToSpeech.speak(text,TextToSpeech.QUEUE_FLUSH,ttsMap); 
    } 
} 

我的問題是,打招呼後,它不火的OnStart()OnError()OnDone()方法。這是爲什麼發生?我試過setOnUtteranceListner()以及相同的結果。它不會觸發任何方法,敬酒不會出現。

請爲此解決方法或解決方法。

我想上的設備有:

  • API 19個Micromax的帆布硝基
  • API 21三星S4
  • API 23(MARSHMELLOW)ASUS Zenfone
  • +0

    沒有看起來錯誤,但嘗試移動你的ProgressListener在onInit之外 - 我的意思是讓你的主要活動實現兩個而不是botListener類 – brandall

    +0

    我的活動擴展了appcompatactivity,我不能擴展utteranceprogresslistener。那我該怎麼做呢? – Yashodhan

    +0

    好吧,我試過但仍然沒有結果。我現在已將utteranceProgressListener保存在OnInit中。沒有運氣。 – Yashodhan

    回答

    2

    我終於想通了,爲什麼回調沒有工作。事實證明,他們正在工作並呼籲單獨的線程。所以要執行正常的功能,請調用'Activity.this.RunOnUiThread'中的函數並將其放入回調函數中。