我正在为android开发一个使用TTS的应用程序。我创建了一个启动屏幕,检查是否安装了TTS引擎,如果没有安装,它将转到Google下载。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
...
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
...
if (requestCode == PersonalTextToSpeech.MY_DATA_CHECK_CODE)
{
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS)
{
mTts = new TextToSpeech(context, this);
} else
{
Intent installIntent = new Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
context.startActivity(installIntent);
}
}
}它在使用2.2和2.3.x操作系统的三星设备上运行良好。如果需要的话,它会转到Google,但现在我已经尝试了三星Galaxy S3 ( 4.1.1),它默认安装了两个TTS (三星和谷歌),所以我得到了一个对话框,要求选择一个。

如果用户选择三星,它工作得很好,但是如果用户选择Google,它会转到设置->语言和输入->文本到语音输出-> Google文本到语音引擎-->设置->安装语音数据--我得到了以下信息:

所以,我有三个问题:
resultCode是LANG_NOT_SUPPORTED (-2)。事实上,现在我写这篇文章的时候,我发现了一些奇怪的东西。
如果您选择三星TTS,它将“工作”(resultCode = CHECK_VOICE_DATA_PASS (1)),但“声音声音”将根据设置的方式而改变(查看屏幕快照#3):

如果您选择三星,它将使用三星TTS或谷歌TTS,根据您所选择的内容:设置->语言和输入->文本到语音输出。
因此,即使您选择三星TTS,您也可以使用Google,但是如果您直接选择Google (参见Screen快照#1),它将失败。
有人能解释我做错了什么吗?
谢谢你的帮助。
发布于 2013-08-26 07:39:24
我也遇到了这个问题,我只是替换了我的onActivityResult中的一个代码来解决这个问题。我不是检查TTS数据,而是检查是否有可用的声音。
if (availableLanguages.isEmpty()) {
// no language data available, prompt for install
Intent installIntent = new Intent();
installIntent
.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
} else {
// some language data is available, create TTS instance
myTTS = new TextToSpeech(this, this);
}https://stackoverflow.com/questions/13286227
复制相似问题