Android UtteranceProgressListener在高于21的api级别中未被调用
我想知道为什么我的听众没有接到电话。 以下是我如何努力做到这一点Android UtteranceProgressListener在高于21的api级别中未被调用,android,text-to-speech,Android,Text To Speech,我想知道为什么我的听众没有接到电话。 以下是我如何努力做到这一点 private UtteranceProgressListener progressListener=new UtteranceProgressListener() { @Override public void onStart(String utteranceId) { Log.d("modroid", "speech started"); } @Override p
private UtteranceProgressListener progressListener=new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
Log.d("modroid", "speech started");
}
@Override
public void onDone(String utteranceId) {
Log.d("modroid", "done");
}
@Override
public void onError(String utteranceId) {
Log.d("modroid", "error");
}
};
private void prepareTxtToSpeech() {
textToSpeech = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
if (textToSpeech.isLanguageAvailable(Locale.US) == TextToSpeech.LANG_AVAILABLE) {
textToSpeech.setLanguage(Locale.ENGLISH);
textToSpeech.setSpeechRate(0.8f);
textToSpeech.setOnUtteranceProgressListener(progressListener);
}
} else if (status == TextToSpeech.ERROR) {
Toast.makeText(context, context.getString(R.string.txttospeech_error), Toast.LENGTH_LONG).show();
}
}
});
}
下面是我如何称呼口语方法的
public void speak(String text) {
if (textToSpeech != null) {
Log.d("modroid", "speaking: ");
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, "some id");
}
}
我知道以前有人问过这样的问题,但没有任何帮助。请告诉我哪里出了错。您必须小心如何“验证”语言是否可用以及是否设置正确:
switch (textToSpeech.isLanguageAvailable(Locale.US)){
case TextToSpeech.LANG_AVAILABLE:
break;
case TextToSpeech.LANG_COUNTRY_AVAILABLE:
break;
case TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE:
break;
case TextToSpeech.LANG_MISSING_DATA:
break;
case TextToSpeech.LANG_NOT_SUPPORTED:
break;
}
您还应该以同样的方式检查textToSpeech.setLanguage(Locale.ENGLISH)
的响应
前三名中的一个可能会被你接受。否则,您将需要处理该问题
在
textToSpeech.isLanguageAvailable(Locale.US)==textToSpeech.LANG\u AVAILABLE内部和外部放置一些日志记录
它是否返回true或false?是,它返回false。那我该怎么办