我已经实施了TextToSpeech
完全按照中提到的集成这篇博文。在我将它添加到我的程序中后,它现在干扰了我的其他程序intent
s.
例如:
- 项目清单
- 用户启动应用程序
- 用户调用加载活动
- 用户选择要加载的文件,活动返回 fileanme 以在意图中加载
- 主活动启动,并意识到需要加载文件名,因此开始这样做
- 需要完成 TTS 检查,因此我启动了
ACTION_CHECK_TTS_DATA
intent
- 这会暂停主要活动again并且加载过程被中断
- 当 TTS 检查返回时,加载从未发生。
我什么时候需要进行 TTS 检查?我可以在应用程序启动时执行一次吗?这导致我的应用程序加载缓慢。如果可能的话,我希望在单独的线程中执行此加载。
检查一次。一旦安装了数据,用户就不太可能需要再次执行此操作。一旦安装了数据,用户就无法删除它,即使他们想删除。
另外,不要使用 ACTION_CHECK_TTS_DATA Intent,这使用起来很尴尬。
相反,请执行以下操作:
- 创建文本转语音
- 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;
}
}
}
});
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)