Android 为什么要采取“检查数据意图”的行动;难以使用;?
Android中文本到语音的介绍中说,“在创建活动时,一个好的第一步是检查TTS资源是否具有相应的意图:” 但@gregm in提出了不同的建议: 另外,不要使用ACTION\u CHECK\u TTS\u DATA Intent,这样做会让人感到尴尬 使用 相反,请执行以下操作:Android 为什么要采取“检查数据意图”的行动;难以使用;?,android,text-to-speech,Android,Text To Speech,Android中文本到语音的介绍中说,“在创建活动时,一个好的第一步是检查TTS资源是否具有相应的意图:” 但@gregm in提出了不同的建议: 另外,不要使用ACTION\u CHECK\u TTS\u DATA Intent,这样做会让人感到尴尬 使用 相反,请执行以下操作: 创建TextToSpeech OnInit,检查isLanguageAvailable(),如果是,则表明您的应用程序已全部设置。如果没有,则发送操作\u安装\u TTS\u数据 如果我理解正确,@gregm所做/建
TextToSpeech.LANG\u MISSING\u DATA
检查从onActivityResult()
推迟到onInit()
为什么这比这种方法更好
为什么ACTION\u CHECK\u TTS\u数据如此“难以使用”?这是@gregm
ACTION\u CHECK\u TTS\u DATA
需要更复杂的执行和更多的代码,但与TextToSpeech.isLanguageAvailable()
的功能相同,让我解释一下:
1) 使用操作\u安装\u TTS\u数据时,需要两个异步进程。首先,启动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的官方文档需要修改以推荐这种方法
如果您仍然不相信我们正在讨论的两种方法都能做相同的事情,请查看我的替代实现和。另外,如果你不在乎这些东西,只想让你的应用程序说话,就扩展它,完成它。谢谢!如果您允许,我将强调为什么要增加额外的复杂性?这基本上是答案的关键。我想确保我没有遗漏一些关键的东西,如果采用“正式”方法,这些东西会使应用程序无法工作+1&接受。您好,我使用isLanguageAvailable进行了测试,但没有给出期望的结果。例如,没有安装韩语语音数据。然而,当我在韩国人的语音数据上调用isLanguageAvailable时,它没有下载,只是返回LANG_COUNTRY_AVAILABLE,这也是正确的。该语言环境仅适用于尚未下载的语音数据。然而,由于这一点,我永远无法检查语音数据是否已下载,因为我永远不会得到LANG_MISSING_数据。解决方案是否不再适用?谢谢此外,LANG_COUNTRY_AVAILABLE并不表示语音数据已下载,它只是表示支持并可下载。
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)
}