我知道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应用程序,所以我对它很新,请耐心等待我;)
答案 0 :(得分:1)
您不需要活动来访问主线程,服务也可以正常工作。
现在,我没有您的代码,但我假设您使用的是IntentService或类似代码。 由于在工作线程
上激活IntentService.onHandleIntent(),因此会出现问题要解决,要么:
A。将Speechrecognizer调用逻辑放在IntentService.onCreate()上 它总是在主线程上调用,或者
B。切换到使用标准服务并将您的逻辑放在onStartCommand()中 同样保证在主线程上调用的方法。