an0*_*00b 4 android text-to-speech
该负责人介绍文本到语音Android中说:"在创建活动中,良好的第一步是检查是否与相应的意图TTS资源的存在:"
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
Run Code Online (Sandbox Code Playgroud)
但是@gregm在这个帖子中暗示:
另外,不要使用ACTION_CHECK_TTS_DATA Intent,这很难使用.
相反,请执行以下操作:
- 创建TextToSpeech
- OnInit,检查isLanguageAvailable(),如果是,你的应用程序都已设置好.如果没有,发送ACTION_INSTALL_TTS_DATA
如果我理解正确,@ gregm做/建议的是将支票推迟到.TextToSpeech.LANG_MISSING_DATAonActivityResult()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)
}
Run Code Online (Sandbox Code Playgroud)
或> 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)
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我宁愿只使用if语句,而不是使用Intentrunaround.我相信官方Android文档需要更改才能推荐这种方法.
如果您仍然不相信我们正在讨论的两种方法都做同样的事情,请查看我在这里和这里的替代实现.此外,如果您不关心所有这些内容并且只是希望您的应用发言,请延长此活动并完成.
| 归档时间: |
|
| 查看次数: |
1929 次 |
| 最近记录: |