android - 等待 TextToSpeech onInit() 初始化

标签 android multithreading android-asynctask android-service text-to-speech

我正在开发一个简单的应用程序,当接到电话时,它会说出联系人姓名或未知号码。我正在使用 broadcastReceiverServices 实现该应用程序。如果我在模拟器上运行应用程序并使用 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/

相关文章:

java - 为什么SynchronizedList的listIterator需要用户外部同步?

java - 异步启动 Activity 不出现

java - Android: NullPointerException: println 需要一条消息;

android - Firebase 聊天的左右对齐

android - 在 android 共享应用程序中选择默认 Intent

使用 Auth.GOOGLE_SIGN_IN_API 时的 java.lang.IllegalStateException : Must not set scopes in GoogleApiClient. Builder

JavaSE : First thread to call a method interrupts all other threads

c# - C#LazyCache并发字典垃圾回收

Android 单个 AsyncTask 中的多个 Web 服务调用

javascript - 如何从在线流媒体电台获取流媒体网址