android.speech.RecognitionService SecurityException与一些第三方语音识别器

我们创建了一个使用Google语音识别器的
Android应用程序,我们首先在程序中选择使用Google语音识别器.大多数设备工作正常,只有少数设备(MEIZU_M5,U78-E,Apollo Lite等)报告以下异常.似乎与联发科的语音命令有些冲突?我们发现其他一些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?

通过firebase日志,我们发现它发生在许多第三方语音识别器上:

com.mediatek.voicecommand
com.htc.android.voicedictation
com.vlingo.midas
com.iflytek.speechcloud
com.iflytek.speechsuite
...

我们还测试了其他一些第三方语音识别器.导致异常的那些语音识别器是否仅用于系统语音命令而且无法访问应用程序?

任何想法或经验都是受欢迎的.

最佳答案 最后,我们从Android开发者的一些信息中找到了根本原因

Services overview

但是,您可以在清单文件中将服务声明为私有,并阻止从其他应用程序访问.

这些第三方SpeechRecognizer服务是私有的,不能被其他应用程序调用.
因此,我们只是尝试捕获此异常并通知用户安装Google App(语音输入).或者您可以通过跳过它们来排除这些意外的SpeechRecognizer.

点赞