gpt4 book ai didi

android - 为什么 ACTION_CHECK_TTS_DATA Intent "awkward to use"?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:07 24 4
gpt4 key购买 nike

official Android 中文本转语音的介绍说,“在创建 Activity 时,第一步是检查是否存在具有相应 Intent 的 TTS 资源:”

Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);

但是@gregm 在this thread否则建议:

Also, don't use the ACTION_CHECK_TTS_DATA Intent, that's awkward to use.

Instead, do the following:

  1. Create TextToSpeech
  2. OnInit, check isLanguageAvailable() if it is, your app is all set. if not, send the ACTION_INSTALL_TTS_DATA

如果我理解正确,@gregm 所做/建议的是延迟 TextToSpeech.LANG_MISSING_DATA 检查从 onActivityResult()onInit().

为什么这比 formal 更好方法?

为什么 ACTION_CHECK_TTS_DATA 如此“难用”?

最佳答案

我是@gregm。

ACTION_CHECK_TTS_DATA 需要更复杂的执行和更多代码,但与 TextToSpeech.isLanguageAvailable() 做同样的事情让我解释一下:

1) 当您使用 ACTION_INSTALL_TTS_DATA 时,您需要两个异步进程。首先,启动一个 Intent 并接收结果。其次,等待 TextToSpeech 调用 onInit() 当您的应用正在等待时,更多情况可能会出错。

2) 您要做的只是执行一个 if 语句,如果需要,您需要相同的代码来处理安装语言数据,所以为什么要增加额外的复杂性

它归结为这样做:

是否需要一行代码:

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 文档需要更改以推荐这种方法。

如果您仍然不相信我们正在讨论的两种方法做同样的事情,请查看我的替代实现 herehere .此外,如果您不关心所有这些东西,只想让您的应用说话,只需扩展此 Activity并完成。

关于android - 为什么 ACTION_CHECK_TTS_DATA Intent "awkward to use"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11550746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com