onUtteranceCompleted在模拟器上被激活,但在硬件上却没有

时间:2012-02-15 19:13:48

标签: android android-emulator hashmap text-to-speech onutterancecompleted

我无法让我的onUtteranceCompleted()在我的Galaxy Nexus 4.0.2上被解雇。 api 8,10和15的模拟器会在onUtteranceCompleted()上触发。我投入了大约5个小时,并在stackoverflow上阅读了关于这个的每一篇文章,我没有让它工作。如果有人可以帮助我,我会很高兴;(我对android很新,所以如果你能为初学者解释它会很棒。

编辑:嗯..上面的陈述适用于大多数情况,我只是让它在我的硬件4.0.2上工作。然后我关闭它并再次启动它,onUtteranceCompleted()确实再次被触发。昨天有同样的事情(在一些代码更改之前),所以它在90%的时间都不工作。无法弄清楚;(

edit2:FYI:mTts.setOnUtteranceCompletedListener(this);返回TextToSpeech.SUCCESS

非常感谢!

这是我的代码:

(...)
    public void onInit(int status) {            
mTts.setOnUtteranceCompletedListener(this);

if (status == TextToSpeech.SUCCESS) {    
    int result = mTts.setLanguage(Locale.US);
    if (result == TextToSpeech.LANG_MISSING_DATA ||
        result == TextToSpeech.LANG_NOT_SUPPORTED) {
        Log.e(TAG, "Language is not available.");
    } else {
        TTSAusgabe.setEnabled(true);
    }
} else {
    Log.e(TAG, "TTS failed");
}    
}


SayText() {  (....)
MundAnimation.start();
HashMap<String, String> params = new HashMap<String, String>();
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "utterance");
mTts.speak("Ma Text", TextToSpeech.QUEUE_FLUSH, params);
  } 
}


// That's the bad boy!
public void onUtteranceCompleted(String utterance) 
{
MundAnimation.stop();
    //startVoiceRecognitionActivity();
System.out.println("drin"); 
}
(...)

1 个答案:

答案 0 :(得分:0)

由于您遇到的问题有时只会出现问题,因此问题必须归因于TextToSpeech初始化的异步性质。有时当我的代码在调用onInit()之前设置TextToSpeech的属性时,我看到TextToSpeech失败。

我怀疑你在TextToSpeech调用onInit()之前激活了SayText()。这种情况只会发生一段时间。

看起来你有正确的代码在onInit()期间设置onUtteranceCompletedListener,但也许这也有时间问题。