Android TTS检查支持的语言环境,缺less/未下载的语音数据

我正在使用Android的TextToSpeech类。 一切正常。 但是,有些语言/语言环境默认情况下未安装,但由TTS引擎支持,我无法捕获缺less语音数据的状态。

在互联网上,当我尝试将语言设置为语音数据尚未下载的新语言环境时,它将简单地下载语音数据并正常/成功地执行说话方法。

但是,在closures互联网的情况下,当我尝试将语言设置为语音数据尚未下载的新语言环境时,尝试下载语音数据。 但没有互联网,只是在所选语言环境的“语言和input”下的“TTS语音数据”设置屏幕上显示“下载”,没有任何进展。 而且正如预期的那样,由于没有下载语音数据,所以说方法不起作用。 当发生这种情况时,我会认为TTS方法setLanguage / isLanguageAvailable将返回LANG_MISSING_DATA来捕获这个状态,但是,它只是返回LANG_COUNTRY_AVAILABLE。 情况如下图所示: 在这里输入图像说明

我希望能够检测到所选语言环境的语音数据何时未被下载/丢失,并且要么发送Toast消息,要么直接用户下载它。 我已经看到几个postbuild议使用isLanguageAvailable像这样的使用。 我也看了一下android文档 ,好像isLanguageAvailable的返回值应该用LANG_MISSING_DATA来捕获缺less语音数据的状态。

我也尝试发送ACTION_CHECK_TTS_DATA意图作为另一种方式来检查我链接的Android文档中build议的缺失数据。 但是,resultCode再次未捕获/指示语音数据丢失(CHECK_VOICE_DATA_FAIL),而是返回了CHECK_VOICE_DATA_PASS。

在这种情况下,我应该如何捕获可用/支持的语言/区域的状态,并且缺less语音数据? 我也很好奇,为什么CHECK_VOICE_DATA_PASS和LANG_MISSING_DATA不是返回的值。 当语音数据丢失时,不应该返回这些值吗? 谢谢! 下面是我尝试在没有下载语音数据的语言环境中使用setLanguage和isLanguageAvailable时的返回值(0和1是日志中显示的方法的返回值,-1是对应于缺less语音的语法数据): 在这里输入图像说明

您可以使用以下functionfind设备的所有可用区域设置。 希望这段代码能帮助你。

Locale loc = new Locale("en"); Locale[] availableLocales= loc.getAvailableLocales(); Boolean available=Boolean.FALSE; for (int i=0;i<availableLocales.length;i++) { if(availableLocales[i].getDisplayLanguage().equals("your_locale_language")) { available=Boolean.TRUE; // TODO: } } 

它看起来像一个漫长的等待问题,但无论如何。 看来,你必须检查语音function找出来:

 Set<String> features = voice.getFeatures(); if (features.contains(TextToSpeech.Engine.KEY_FEATURE_NOT_INSTALLED)) { //Voice data needs to be downloaded ... }