为什么ACTION_CHECK_TTS_DATA意图“不好用”?(Why is the ACTION

2019-06-26 09:29发布

该负责人介绍文本到语音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意图,这是难以使用

相反,做到以下几点:

  1. 创建文字转语音
  2. OnInit的检查isLanguageAvailable()如果是,您的应用程序是所有设置。 如果不是,发送ACTION_INSTALL_TTS_DATA

如果我理解正确的话,什么@gregm确实/顾名思义就是推迟 TextToSpeech.LANG_MISSING_DATA从检查onActivityResult()onInit()

这是为什么好过正式的方法吗?

为什么是这样ACTION_CHECK_TTS_DATA“不好用”?

Answer 1:

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

如果你还是不相信,我们正在讨论这两种方法做同样的事情,检查出的替代实现我在这里和这里 。 此外,如果你不关心这些东西,只是想你的应用程序说话,只是延长这种活动和实现。



文章来源: Why is the ACTION_CHECK_TTS_DATA Intent “awkward to use”?