我完全按照this blog post中的提法实施了TextToSpeech
集成。在我将它添加到我的程序后,它现在正在干扰我的其他intent
。
例如:
ACTION_CHECK_TTS_DATA
intent 我什么时候需要这个TTS检查?我可以在应用程序启动时执行一次吗?这导致我的应用程序加载缓慢。如果可能的话,我希望在单独的线程中执行此加载。
答案 0 :(得分:8)
检查一次。安装数据后,用户不太可能再次执行此操作。一旦安装了数据,用户就无法删除它,即使他们想要这样做。
另外,不要使用ACTION_CHECK_TTS_DATA Intent,这很难用。
相反,请执行以下操作:
这是一些以我建议的方式初始化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;
}
}
}
});
}
}