为什么UtteranceProgressListener不是一个接口? [英] Why is UtteranceProgressListener not an interface?
问题描述
我玩弄Android的TTS功能和TextToSpeech类有这个方法来设置一个监听器,得到通知,一旦TextToSpeech播放完毕:
公众诠释setOnUtteranceCompletedListener(TextToSpeech.OnUtteranceCompletedListener监听器)
但 OnUtteranceCompletedListener
定义为公共抽象类
。正如我的 MainActivity
已经扩展了活动,也不能延长 OnUtteranceCompletedListener
为好。我可以用一个 OnUtteranceCompletedListener
使用旧的方法,但是这是德precated:
公众诠释setOnUtteranceCompletedListener(TextToSpeech.OnUtteranceCompletedListener监听)`
为什么 OnUtteranceCompletedListener
没有定义为公共静态接口
?我想我自己写的 UtteranceProgressListenerImpl
,然后将只需要调用 MainActivity
取值 onDone
方法。这是正确的方式,或是否有更好/更清洁的替代方案?
私有类UtteranceProgressListenerImpl扩展UtteranceProgressListener {
私人MainActivity mainActivity;
UtteranceProgressListenerImpl(MainActivity毫安){
mainActivity =毫安;
}
@覆盖
公共无效onDone(字符串utteranceId){
mainActivity.onDone(utteranceId);
}
@覆盖
公共无效onerror的(字符串utteranceId){/ *空* /}
@覆盖
公共无效ONSTART(字符串utteranceId){/ *空* /}
}
我不知道,我想它应该是一个界面,以及。我用这个code绕过它。它可<一个href="https://github.com/gast-lib/gast-lib/blob/master/library/src/root/gast/speech/voiceaction/VoiceActionExecutor.java"相对=nofollow>此处为好。
此外,投票给这个bug 我在不久前提交的。
公共无效setTts(TextToSpeech TTS)
{
this.tts = TTS;
如果(Build.VERSION.SDK_INT&GT; = 15)
{
tts.setOnUtteranceProgressListener(新UtteranceProgressListener()
{
@覆盖
公共无效onDone(字符串utteranceId)
{
onDoneSpeaking(utteranceId);
}
@覆盖
公共无效onerror的(字符串utteranceId)
{
}
@覆盖
公共无效ONSTART(字符串utteranceId)
{
}
});
}
其他
{
Log.d(TAG,设置utternace完成监听器);
tts.setOnUtteranceCompletedListener(新OnUtteranceCompletedListener()
{
@覆盖
公共无效onUtteranceCompleted(字符串utteranceId)
{
onDoneSpeaking(utteranceId);
}
});
}
}
I'm playing around with Android's TTS features and the TextToSpeech class has this method to set a listener which gets notified once the TextToSpeech has finished playing:
public int setOnUtteranceCompletedListener(TextToSpeech.OnUtteranceCompletedListener listener)
But the OnUtteranceCompletedListener
is defined as public abstract class
. As my MainActivity
already extends Activity, it can't extend OnUtteranceCompletedListener
as well. I could use the older method with a OnUtteranceCompletedListener
, but this is deprecated:
public int setOnUtteranceCompletedListener (TextToSpeech.OnUtteranceCompletedListener listener)`
Why is OnUtteranceCompletedListener
not defined as public static interface
? I'm thinking to write my own UtteranceProgressListenerImpl
, which will then just call the MainActivity
s onDone
method. Is this the proper way or is there a better/cleaner alternative?
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 */ }
}
I don't know I think it should be an interface as well. I use this code to get around it. It is available here as well.
Also, vote for this bug I submitted a while ago.
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);
}
});
}
}
这篇关于为什么UtteranceProgressListener不是一个接口?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!