gpt4 book ai didi

java - UtteranceProgressListener 不会调用函数

转载 作者:太空宇宙 更新时间:2023-11-03 13:49:15 27 4
gpt4 key购买 nike

我正在尝试制作一个语音驱动的应用程序,但是我遇到了一个主要问题。

无论我将 Speak 方法放在哪里,我的 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 的实现

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(),结果相同。它不会触发任何方法,也不会显示 Toast。

请告知解决方法或解决方法。

我试过的设备是:

  • API 19 Micromax Canvas 硝基
  • API 21 三星 S4
  • API 23(棉花糖)华硕 Zenfone
  • 最佳答案

    我终于弄清楚为什么回调不起作用。事实证明,他们正在一个单独的线程上工作和调用。因此,要执行正常功能,请调用“Activity.this.RunOnUiThread”中的函数并将其放入回调函数中。

    关于java - UtteranceProgressListener 不会调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37230914/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com