5
我与Android的TTS功能和文字转语音类玩弄了这个方法来设置它得到通知,一旦文字转语音播放完毕的监听器:为什么UtteranceProgressListener不是一个接口?
public int setOnUtteranceCompletedListener(TextToSpeech.OnUtteranceCompletedListener listener)
但OnUtteranceCompletedListener
被定义为public abstract class
。由于我的MainActivity
已经扩展了Activity,所以它也不能延伸OnUtteranceCompletedListener
。我可以用一个OnUtteranceCompletedListener
旧的方法,但是不赞成这种方式:
public int setOnUtteranceCompletedListener (TextToSpeech.OnUtteranceCompletedListener listener)`
为什么OnUtteranceCompletedListener
没有定义为public static interface
?我正在考虑编写我自己的UtteranceProgressListenerImpl
,然后再调用MainActivity
的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 */ }
}
匿名内部类的替代解决方案是创建一个完全独立的(非匿名)内部类来扩展UtteranceProgressListener。这是我在修改使用文本到语音的应用程序时采用的方法。不过,我已经在开发者控制台中收到了几个NoClassDefFoundError异常,并得出结论,这种方法是不健全的(没有双关语意图)。偶尔,类加载器无法及时或完全无法加载类(很难判断哪个类)。所以不要采用那条路线。 – Phil 2012-08-30 19:19:07