gpt4 book ai didi

android - 设置新语言 : TextToSpeech. 后,在返回新的 TextToSpeech(..) 实例之前调用 onInitListener

转载 作者:搜寻专家 更新时间:2023-11-01 09:09:57 28 4
gpt4 key购买 nike

对于 Android 上的新 TextToSpeech 实例,我遇到了 onInit(..) 的意外问题。

我发现的所有代码示例都假定在调用 onOnit(..) 之前将新实例返回给调用者,以便返回值可用于访问新的 TextToSpeech 实例。

更改手机的默认语言后,我的 Activity 重新启动(如预期的那样),并且我像往常一样创建了一个新的 TextToSpeech 实例。但在这种情况下,onInit(..) 回调在 new TextToSpeech(..) 返回实例之前被调用。 onInit(..) 中的任何设置都使用过时的实例或 null

public static void startTTS()
{
tts_enabled = false;
texttospeech = null;
texttospeech = new TextToSpeech(starter/*context*/,new TextToSpeech.OnInitListener()
{
public void onInit(int status)
{
if(texttospeech==null) throw new RuntimeException("startTTS.onInit: texttospeech=null");

boolean r = status==TextToSpeech.SUCCESS;
if(r) { init_tts(); tts_enabled = true; }
else texttospeech = null;
}
});
}

基本上,在这个例子中,异常抛出。
我已经在 Huawei U8510 Android 2.3.3 和 Android 2.1 模拟器上进行了测试。
我应该在这里做什么?

最佳答案

我已经解决了这个问题,它表明原因与假设的完全不同。我的初始化代码执行了两次,创建了两个 TextToSpeech 实例,并且两个 onInit() 交错。

init代码被调用两次的原因有点出乎意料:

我已经为此 Activity 设置了属性 android:launchMode="singleTask" 并且文档说我得到了 onNewIntent() 而不是 onCreate() 如果 Activity 已经在运行。我假设,而且似乎是真的,我得到了 onNewIntent() instead onCreate() 但在一些罕见的情况下,例如用户更改时区后,我立即得到 onNewIntent() 并且除了 onCreate()。我认为这种行为不是故意的。

关于android - 设置新语言 : TextToSpeech. 后,在返回新的 TextToSpeech(..) 实例之前调用 onInitListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8970950/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com