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