Reputation: 509
We created an Android app which uses Google speech recognizer and we choose first ,in program, Google speech recognizer to use. Most devices work fine, and only few devices(MEIZU_M5, U78-E, Apollo Lite etc.) report below exceptions. It seems some conflicts with Mediatek's voicecommand? We found some other Mediatek's devices work fine. it's confusing.
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)
To trace into the codes, the source codes only show up to ContextWrapper.java. How to let it show up to ContextImpl.java:1421?
By firebase log, we find it happens at many 3rd-party speech recognizers:
com.mediatek.voicecommand
com.htc.android.voicedictation
com.vlingo.midas
com.iflytek.speechcloud
com.iflytek.speechsuite
...
We've also tested some other 3rd-party speech recognizers working well. Are those speech recognizers,which caused exception, just used for system voice commands and not accessible to apps?
Any idea or experience is welcome.
Upvotes: 5
Views: 1393
Reputation: 509
At last, we found the root cause from some information in Android Developers Services overview:
However, you can declare the service as private in the manifest file and block access from other applications.
These 3rd-party SpeechRecognizer services are private and can not be called by other apps. So, we just try-catch this exception and inform users to install Google App(Voice typing). Or you can exclude these unexpected SpeechRecognizer by just skipping them.
Upvotes: 2