三星Galaxy S3上的TTS问题

时间:2012-11-08 09:33:39

标签: android text-to-speech samsung-mobile

我正在开发一个使用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操作系统的三星设备上运行良好。如果需要,它会转到谷歌播放,但现在我尝试使用三星Galaxy S3(4.1.1),默认安装了2个TTS(三星和谷歌),所以我得到一个对话框,要求选择一个。< / p>

Select TTS

如果用户选择三星,它可以完美运行,但如果用户选择Google,则会转到设置 - &gt;语言和输入 - &gt;文本到语音输出 - &gt; Google文字转语音引擎 - &gt;设置 - &gt;安装语音数据,我得到这个: TTS Languages installed

所以,我有3个问题/问题:

  1. 有没有办法以程序方式强行使用三星TTS而不询问?

  2. 我的设备来自西班牙,但如果我将语言更改为英语,则我的Google TTS语言列表中没有此语言,我找不到添加它的方法(参见屏幕截图#2)。登记/>
  3. 如果我将语言更改为西班牙语,则应该在我的设备中安装此语言(请参阅屏幕截图#2),但由于某些原因,TTS resultCodeLANG_NOT_SUPPORTED (-2)。登记/>
  4. 事实上,就在我写这篇文章时,我发现了一些奇怪的东西。

    如果您选择三星TTS,它将“正常”(resultCode = CHECK_VOICE_DATA_PASS (1)),但“声音”会根据您的设置而改变(查看屏幕截图#3): TTS Settings

    如果您选择三星,它将根据您选择的内容使用Samsung TTS或Google TTS: 设置 - &gt;语言和输入 - &gt;文字转语音输出。

    因此,即使您选择三星TTS,您也可以使用Google TTS,但如果您直接选择Google TTS(请参阅屏幕截图#1),它将失败。

    有人能解释我的错误吗?

    感谢您的帮助。

1 个答案:

答案 0 :(得分:-1)

我也陷入了这个问题,我通过替换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);
            }