- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道 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/
我是一名优秀的程序员,十分优秀!