如何在没有主线程或活动的情况下从服务调用语音识别器方法



我知道Stackoverflow和其他网站上有几十个关于SpeechRecognizer类以及如何实现它的链接。我找了好几家,找了好几个小时。虽然有服务实现的例子,但它们似乎不适合我。

我的应用程序有一个活动,但是它只用于用户设置,当我的服务运行时不运行,它是与系统分开调用的。因此,我的服务没有任何与运行/调用SpeechRecognizer类方法相关的主应用程序线程。

正如android文档中所述,这里:

'这个类的方法只能从应用程序主线程调用。'

当我运行我的代码,包括在我的服务类中的SpeechRecognizer.startListening(mSpeechRecognizerIntent)方法,我得到以下错误:

. lang。RuntimeException: SpeechRecognizer应该只在应用程序的主线程中使用

有办法解决这个问题吗?我已经读到,语音识别器可以"识别语音,而在后台运行或从一个服务",我发现在这里:

Android中语音识别使用的比较:基于意图还是基于线程?

这就是我想要的,我只是无法启动语音识别器因为我得到了提到的错误。你还能告诉我是否有必要在应用程序的主线程中调用以下方法(我没有):

mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);mSpeechRecognizer。setRecognitionListener(新SpeechRecognitionListener ());

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

Android语音识别作为Android 4.1的服务4.2

非常感谢你的帮助,提前感谢。这是我的第一个android应用,所以我对它很陌生,请原谅我;)

你不需要一个activity来访问主线程,一个service就可以了。

现在,我没有你的代码,但我假设你正在使用IntentService或类似的。这就产生了一个问题,因为IntentService.onHandleIntent()是在工作线程

上激活的。

要解决,要么:

将语音识别器调用逻辑放在IntentService.onCreate()上它总是在主线程上调用,或者

B。切换到使用标准服务,并将逻辑放在onStartCommand()中

相关内容

最新更新