SpeechToText并运行ACTION_CHECK_TTS_DATA意图

swi*_*ter 5 android text-to-speech

TextToSpeech完全按照这篇博文中提到的那样实现了集成.在我将它添加到我的程序后,它现在正在干扰我的其他程序intent.

例如:

  1. 项目清单
  2. 用户启动应用
  3. 用户调用加载活动
  4. 用户选择要加载的文件,活动返回fileanme以加载意图
  5. 主要活动开始,并意识到它需要加载一个文件名,所以它开始这样做
  6. 需要检查TTS,以便启动ACTION_CHECK_TTS_DATA意图
  7. 这会再次暂停主要活动,并且加载过程会中断
  8. 当TTS检查返回时,加载从未发生过.

我什么时候需要这个TTS检查?我可以在应用程序启动时执行一次吗?这导致我的应用程序加载缓慢.如果可能的话,我希望在单独的线程中执行此加载.

gre*_*egm 8

做一次检查.安装数据后,用户不太可能再次执行此操作.一旦安装了数据,用户就无法删除它,即使他们想要这样做.

另外,不要使用ACTION_CHECK_TTS_DATA Intent,这很难使用.

相反,请执行以下操作:

  1. 创建TextToSpeech
  2. OnInit,检查isLanguageAvailable(),如果是,你的应用程序都已设置好.如果没有,发送ACTION_INSTALL_TTS_DATA

这是一些以我建议的方式初始化TextToSpeech的代码.作为奖励,它也设置了语言.

public class DemoCreateTTS
{
    private static final String TAG = "DemoCreateTTS";

    private TextToSpeech tts;

    public void createTextToSpeech(final Context context, 
            final Locale locale)
    {
        tts = new TextToSpeech(context, new OnInitListener()
        {
            @Override
            public void onInit(int status)
            {
                if (status == TextToSpeech.SUCCESS)
                {
                    Locale defaultOrPassedIn = locale;
                    if (locale == null)
                    {
                        defaultOrPassedIn = Locale.getDefault();
                    }
                    // check if language is available
                    switch (tts.isLanguageAvailable(defaultOrPassedIn))
                    {
                        case TextToSpeech.LANG_AVAILABLE:
                        case TextToSpeech.LANG_COUNTRY_AVAILABLE:
                        case TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE:
                            Log.d(TAG, "SUPPORTED");
                            tts.setLanguage(locale);
                            //pass the tts back to the main
                            //activity for use
                            break;
                        case TextToSpeech.LANG_MISSING_DATA:
                            Log.d(TAG, "MISSING_DATA");
                                Log.d(TAG, "require data...");
                                Intent installIntent = new Intent();
                                installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                                context.startActivity(installIntent);
                            break;
                        case TextToSpeech.LANG_NOT_SUPPORTED:
                            Log.d(TAG, "NOT SUPPORTED");
                            break;
                    }
                }
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)