我正在开发一个使用 TTS 的 android 应用程序。我创建了一个启动画面,我在其中检查是否安装了 TTS 引擎,如果没有安装,它会转到 Google Play 下载它。
@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 Play,但现在我尝试使用三星 Galaxy S3(4.1.1),它默认安装了 2 个 TTS(三星和谷歌),所以我得到一个对话框,要求选择一个。
如果用户选择三星,它工作得很好,但如果用户选择谷歌,它会转到设置 --> 语言和输入 --> 文本到语音输出 --> 谷歌文本到语音引擎 --> 设置 - -> 安装语音数据,我得到了这个:
所以,我有3个问题/问题:
- 有什么方法可以在不询问的情况下以编程方式强制使用三星 TTS?
- 我的设备来自西班牙,但如果我将语言更改为英语,这个在我的谷歌 TTS 语言列表中不可用,我找不到添加它的方法(见截图 #2)。
- 如果我将语言更改为西班牙语,则该语言应该安装在我的设备中(请参见屏幕截图 #2),但由于某种原因,TTS
resultCode
是LANG_NOT_SUPPORTED (-2)
.
事实上,在我写这篇文章的时候,我刚刚发现了一些奇怪的东西。
如果您选择三星 TTS,它将“工作”(resultCode
= CHECK_VOICE_DATA_PASS (1)
),但“声音”会根据您的设置而改变(查看屏幕截图 #3):
如果您选择三星,它将根据您在设置 --> 语言和输入 --> 文本到语音输出中选择的内容使用三星 TTS 或 Google TTS。
因此,即使您选择三星 TTS,您也可以使用 Google TTS,但如果您直接选择 Google TTS(请参见屏幕截图 #1),它将失败。
有人可以解释我做错了什么吗?
谢谢你的帮助。