该负责人介绍文本到语音Android中说:“在创建活动中,良好的第一步是检查是否与相应的意图TTS资源的存在:”
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
但是@gregm在这个线程表明并非如此:
另外,不要使用ACTION_CHECK_TTS_DATA意图,这是难以使用 。
相反,做到以下几点:
- 创建文字转语音
- OnInit的检查isLanguageAvailable()如果是,您的应用程序是所有设置。 如果不是,发送ACTION_INSTALL_TTS_DATA
如果我理解正确的话,什么@gregm确实/顾名思义就是推迟 TextToSpeech.LANG_MISSING_DATA
从检查onActivityResult()
来onInit()
这是为什么好过正式的方法吗?
为什么是这样ACTION_CHECK_TTS_DATA“不好用”?
这是@gregm。
ACTION_CHECK_TTS_DATA
需要更复杂的执行和更多的代码,但尚未做同样的事情TextToSpeech.isLanguageAvailable()
让我解释一下:
1)当您使用需要两个异步进程ACTION_INSTALL_TTS_DATA
。 首先,启动一个Intent
和接受的结果。 其次,要等TextToSpeech
呼叫onInit()
更多可以去错了,而你的应用程序做所有的等待。
2)所有你要做的是执行一个if语句,你需要相同的代码来处理安装语言数据如果需要的话,那么为什么还要增加额外的复杂性 ?
它归结为此:
你想1行代码:
if (TextToSpeech.isLanguageAvailable())
{
(same tts init code here)
}
或> 1行的代码,如:
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
public void onActivityResult(...)
{
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS)
(same tts init code here)
}
在我的角度来看,我宁愿只得到if语句,而不是使用Intent
搪塞。 我相信官方的Android文档需要改变推荐这种方法。
如果你还是不相信,我们正在讨论这两种方法做同样的事情,检查出的替代实现我在这里和这里 。 此外,如果你不关心这些东西,只是想你的应用程序说话,只是延长这种活动和实现。