Android 4.2 Jelly Bean中的文本转语音功能无法工作

6
我们在几年前使用了文本转语音API来为我们的应用程序添加语音提示,效果很好。最近,我们开始收到用户的电子邮件,升级到Android 4.2 Jelly Bean后说语音提示不起作用,并且他们收到一条消息说缺少语音数据,需要下载。当他们点击下载时,会提供下载英语以外的其他语言的选项。
我们按照Android开发者博客上的post实施了文本到语音功能。我们调用TextToSpeech.Engine.ACTION_CHECK_TTS_DATA意图,如果返回除TextToSpeech.Engine.CHECK_VOICE_DATA_PASS之外的任何内容,我们就调用TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA意图。
我们无法访问运行4.2的设备。今天我去了一家当地的商店,在安装有4.2的Nexus 7平板电脑上下载了该应用程序,并成功复现了问题。但是,当我们创建一个基于Nexus 7的AVD并运行模拟器时,语音提示工作正常,我们无法复现这个问题。

我今晚注意到ApiDemos示例中的TextToSpeechActivity没有调用ACTION_CHECK_TTS_DATA意图。相反,它只检查传递给onInit的状态代码以确定文本转语音是否正确初始化。我们将尝试删除语音数据检查,以查看是否有任何改进。一旦我们获得更多信息,我会在几天后发布回复。 - Bryan Bedard
我们更改了应用程序,不再使用ACTION_CHECK_TTS_DATA意图,而是仅依赖于TextToSpeech.isLanguageAvailable()方法(我们之前已经在使用)作为语音数据是否安装的指示器。我们发布了一个更新,Android 4.2用户报告说他们现在的语音提示正常工作。 - Bryan Bedard
1个回答

7

使用Android OS4.1和OS 4.2进行TTS检查,说得客气点,是不同的。

OS 4.1无法正确处理安装数据的意图*

TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA

OS 4.2无法正确处理检查语音数据的意图*

TextToSpeech.Engine.ACTION_CHECK_TTS_DATA

< p > < em > * 我的意思是,与旧版本相比,它不返回正确的状态代码。例如,当明显安装了语音数据时,CHECK_TTS_DATA返回CHECK_VOICE_DATA_MISSING_DATA。可能需要传递一些其他意图数据,但我不确定这在哪里记录。

在我的应用程序中,我不得不禁用这些检查以适应较新的操作系统版本。我怀疑谷歌可能已经这样做,因为他们现在使用Android的条款规定必须使用TTS(但我无法验证这一点-我相信有一个网站描述了必须实施什么才能被称为“ Android”)

更新

正如我所料,Android OS 4.1现在要求在每个Android设备中包括文本到语音,因此这些检查现在有些多余。来自此链接:Android 4.1 Compatibility Definition

3.11 文字转语音
Android 4.1 包括允许应用程序使用文字转语音 (TTS) 服务的 API,并允许服务提供商提供 TTS 服务的实现 [资源, 32]。设备实现必须满足与 Android TTS 框架相关的以下要求:

  • 设备实现必须支持 Android TTS 框架 API,并应包括支持设备上可用语言的 TTS 引擎。请注意,上游 Android 开源软件包括一个功能齐全的 TTS 引擎实现。
  • 设备实现必须支持第三方 TTS 引擎的安装。
  • 设备实现必须提供一个用户可访问的界面,允许用户在系统级别上选择 TTS 引擎。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接