我们创建了一个Android应用程序,它使用谷歌语音识别器,我们首先选择在程序中使用谷歌语音识别器。大多数设备工作正常,只有少数设备(MEIZU_M5、U78-E、阿波罗Lite等)。在例外情况下报告。好像和Mediatek的语音有冲突吗?我们发现还有一些Mediatek的设备正常工作。这很让人困惑。
java.lang.SecurityException: Not allowed to bind to service Intent { act=android.speech.RecognitionService cmp=com.mediatek.voicecommand/.service.VoiceWakeupRecognitionService }
at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1421)
at android.app.ContextImpl.bindService(ContextImpl.java:1385)
at android.content.ContextWrapper.bindService(ContextWrapper.java:604)
at android.speech.SpeechRecognizer.startListening(SpeechRecognizer.java:287)
要追溯到代码,源代码只显示到ContextWrapper.java。如何让它出现在ContextImpl.java:1421上?
通过防火墙日志,我们发现它发生在许多第三方语音识别器上:
com.mediatek.voicecommand
com.htc.android.voicedictation
com.vlingo.midas
com.iflytek.speechcloud
com.iflytek.speechsuite
...
我们还测试了其他一些第三方语音识别器,运行良好。那些导致异常的语音识别器是否仅用于系统语音命令,而应用程序无法访问?
欢迎任何想法或经验。
发布于 2018-10-02 18:49:35
最后,我们从Android开发者服务概览的一些信息中找到了根本原因。
但是,可以在清单文件中将服务声明为私有服务,并阻止来自其他应用程序的访问。
这些第三方SpeechRecognizer服务是私有的,不能被其他应用程序调用。因此,我们只需尝试-捕捉这个异常并通知用户安装Google (语音输入)。或者,只要跳过这些意外的SpeechRecognizer,就可以排除它们。
https://stackoverflow.com/questions/48019398
复制相似问题