我正在开发一个简单的应用程序,当接到电话时,它会说出联系人姓名或未知号码。我正在使用 broadcastReceiver
和 Services
实现该应用程序。如果我在模拟器上运行应用程序并使用 DDMS 启动调用,并保存 2 或 3 个联系人,则应用程序自 onInit()
起就可以正常工作在 tts.speak()
运行之前调用。
现在,当我尝试在 Android 手机上运行相同的应用程序时,会在 tts.speak()
之后调用 onInit
。根据我在寻找这个问题的答案时所理解的,发生这种情况是由于 tts.speak()
没有等待 onInit
被调用。
我在这个问题上找到的一个解决方案是 How to wait for TextToSpeech initialization on Android但这也不起作用。
这个问题已被问过很多次,但我找不到有效的解决方案。此链接建议使用处理程序 http://davidcheney.wordpress.com/2010/11/16/multitasking-in-android/但作为一个新手,我不知道如何实现它。
据我了解,我必须等到 onInit
被调用才能使用 tts.speak()
但我不知道该怎么做。
更新
我试图在 onInit
之外调用 speak
函数,因为要说出的数据来自其他地方,并且我不想在 中进行所有编码>onInit
,这不起作用。所以我改变了我的代码,最终设法在 onInit()
内运行 speak()
。
虽然代码现在正在运行,但必须有一种方法可以在 onInit
之外调用 speak()
。所以我会等待更好的答案,否则将我的代码发布给面临同样问题的其他人。
最佳答案
您可以设置一个类成员标志 boolean mTtsInitialized
并在每次调用 speak
时检查此标志,或者将代码放在 onInit 中获取要说出的数据
关于android - 等待 TextToSpeech onInit() 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17678909/