我正在玩Android的TTS功能,TextToSpeech类有这个方法设置一个侦听器,一旦TextToSpeech完成播放就会收到通知:
public int setOnUtteranceCompletedListener(TextToSpeech.OnUtteranceCompletedListener listener)
但OnUtteranceCompletedListener
定义为public abstract class
。由于我的MainActivity
已经扩展了活动,因此它也无法扩展OnUtteranceCompletedListener
。我可以将旧方法与OnUtteranceCompletedListener
一起使用,但不推荐使用:
public int setOnUtteranceCompletedListener (TextToSpeech.OnUtteranceCompletedListener listener)`
为什么OnUtteranceCompletedListener
未定义为public static interface
?我正在考虑编写自己的UtteranceProgressListenerImpl
,然后只需调用MainActivity
s onDone
方法。这是正确的方式还是有更好/更清洁的替代方案?
private class UtteranceProgressListenerImpl extends UtteranceProgressListener {
private MainActivity mainActivity;
UtteranceProgressListenerImpl(MainActivity mA) {
mainActivity = mA;
}
@Override
public void onDone(String utteranceId) {
mainActivity.onDone(utteranceId);
}
@Override
public void onError(String utteranceId) { /* empty */ }
@Override
public void onStart(String utteranceId) { /* empty */ }
}
答案 0 :(得分:7)
我不知道我认为它应该也是一个界面。我用这段代码来解决它。它也可用here。
另外,投票给我前一段时间提交的this bug。
public void setTts(TextToSpeech tts)
{
this.tts = tts;
if (Build.VERSION.SDK_INT >= 15)
{
tts.setOnUtteranceProgressListener(new UtteranceProgressListener()
{
@Override
public void onDone(String utteranceId)
{
onDoneSpeaking(utteranceId);
}
@Override
public void onError(String utteranceId)
{
}
@Override
public void onStart(String utteranceId)
{
}
});
}
else
{
Log.d(TAG, "set utternace completed listener");
tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener()
{
@Override
public void onUtteranceCompleted(String utteranceId)
{
onDoneSpeaking(utteranceId);
}
});
}
}