如何从没有主线程或活动的服务调用Speechrecognizer方法

时间:2014-08-03 18:54:27

标签: java android android-service

我知道Stackoverflow和其他网站上有很多关于SpeechRecognizer类的链接以及如何实现它。我经历了其中几个并搜索了几个小时。 虽然有服务实施的例子,但它们似乎对我不起作用。

我的应用程序有一个活动,但它仅用于用户设置,并且在我的服务运行时不运行,这是与系统分开调用的。因此,为了运行/调用SpeechRecognizer类的方法,我的服务没有任何主要的应用程序线程。

正如在android文档中所述,here

  

'必须仅从主应用程序线程调用此类的方法。'

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

  

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

有没有办法解决这个问题?我已经读过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应用程序,所以我对它很新,请耐心等待我;)

1 个答案:

答案 0 :(得分:1)

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

现在,我没有您的代码,但我假设您使用的是IntentService或类似代码。 由于在工作线程

上激活IntentService.onHandleIntent(),因此会出现问题

要解决,要么:

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

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