SpeechToText并运行ACTION_CHECK_TTS_DATA意图

时间:2010-10-09 01:54:59

标签: android text-to-speech

我完全按照this blog post中的提法实施了TextToSpeech集成。在我将它添加到我的程序后,它现在正在干扰我的其他intent

例如:

  1. 列表项
  2. 用户启动应用
  3. 用户调用加载活动
  4. 用户选择要加载的文件,活动返回fileanme以在意图中加载
  5. 主要活动开始,并意识到需要加载文件名以便开始这样做
  6. 需要检查TTS,以便启动ACTION_CHECK_TTS_DATA intent
  7. 暂停主活动 ,加载过程中断
  8. 当TTS检查返回时,加载从未发生过。
  9. 我什么时候需要这个TTS检查?我可以在应用程序启动时执行一次吗?这导致我的应用程序加载缓慢。如果可能的话,我希望在单独的线程中执行此加载。

1 个答案:

答案 0 :(得分:8)

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

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

相反,请执行以下操作:

  1. 创建TextToSpeech
  2. OnInit,检查isLanguageAvailable() 如果是,您的应用程序已全部设置。 如果没有,请发送ACTION_INSTALL_TTS_DATA
  3. 这是一些以我建议的方式初始化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;
                        }
                    }
                }
            });
        }
    }