gpt4 book ai didi

java - 如何在没有主线程或 Activity 的情况下从服务调用 Speechrecognizer 方法

转载 作者:行者123 更新时间:2023-11-30 02:45:31 25 4
gpt4 key购买 nike

我知道 Stackoverflow 和其他网站上有许多关于 SpeechRecognizer 类及其实现方法的链接。我已经浏览了其中的几个,并且搜索了几个小时。虽然在服务中有实现的例子,但它们似乎对我不起作用。

我的应用程序有一个 Activity ,但它仅用于用户设置,不会在我的服务运行时运行,它与系统分开调用。因此,我的服务没有任何要关联的主应用程序线程来运行/调用 SpeechRecognizer 类的方法。

正如 android 文档中所述,here :

'This class's methods must be invoked only from the main application thread.'

当我运行包含服务类中的 SpeechRecognizer.startListening(mSpeechRecognizerIntent) 方法的代码时,出现以下错误:

java.lang.RuntimeException: SpeechRecognizer should be used only from the application's main thread

有没有办法解决这个问题?我读到 SpeechRecognizer 可以“在后台运行时或从服务中识别语音”,我在这里发现:

Comparison of Speech Recognition use in Android: by Intent or on-thread?

这基本上就是我想要的我似乎无法启动 SpeechRecognizer,因为我遇到了上述错误。您能否也告诉我是否有必要在应用程序的主线程(我没有)中调用以下方法:

mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this); mSpeechRecognizer.setRecognitionListener(new SpeechRecognitionListener());

我的代码基本上与此链接顶部答案中的代码相同:(没有 IncomingHandler 类,我认为它仅用于控制监听器的时间)

Android Speech Recognition as a service on Android 4.1 & 4.2

非常感谢一些帮助,在此先感谢。这是我的第一个 Android 应用程序,所以我对它还很陌生,请多多包涵 ;)

最佳答案

您不需要 Activity 来访问主线程,服务就可以正常工作。

现在,我没有您的代码,但我假设您使用的是 IntentService或类似的。这会带来问题,因为 IntentService.onHandleIntent()工作线程

上激活

要解决,要么:

A. 将 Speechrecognizer 调用逻辑放在 IntentService.onCreate() 上它总是在主线程上调用,或者

B. 切换到使用标准服务并将您的逻辑放在 onStartCommand() 中再次保证在主线程上调用该方法。

关于java - 如何在没有主线程或 Activity 的情况下从服务调用 Speechrecognizer 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25107991/

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