禁用googlequicksearchbox时自定义键盘SpeechRecognizer使用方案
问题说明
需要禁用系统应用com.google.android.googlequicksearchbox(谷歌快速搜索框),但执行禁用操作后,自定义键盘的语音识别功能无法正常使用,需要确认可行的解决方法,或是可在应用内手动引入依赖、无需在设备上启用该应用的实现方案。
已在清单文件中为android.speech.RecognitionService添加了query标签,尝试通过如下代码初始化SpeechRecognizer:
@Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(ContextCompat.checkSelfPermission(this,Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED){ checkPermission(); } ////////// printListofSupportedLanguages(); ///////// editText = findViewById(R.id.text); micButton = findViewById(R.id.button); final Intent speechRecognizerIntent; speechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); try { speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this, ComponentName.unflattenFromString("android.speech.RecognitionService/com.google.android.voicesearch.serviceapi.GoogleRecognitionService"))); Log.d(TAG,"SpeechRecognizer Created"); speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); } catch (Exception e) { e.printStackTrace(); Log.e(TAG,"Exception Rec:"+e.getMessage()); }
解决方案
- 根因说明:代码中显式指定的识别服务
com.google.android.voicesearch.serviceapi.GoogleRecognitionService是com.google.android.googlequicksearchbox包内置的组件。Android系统会对被禁用应用的所有组件做拦截,即使添加了queries标签也无法绑定启动该服务,普通应用没有系统权限无法绕过这个限制。 - 方案1:替换为设备上其他可用的系统语音识别服务
不要硬编码谷歌快速搜索框内置的识别服务组件名,先通过代码遍历查询设备上所有已启用的RecognitionService实现,选择非com.google.android.googlequicksearchbox提供的可用服务即可,比如部分厂商系统自带的语音识别服务、其他已安装语音类应用对外提供的识别服务。如果设备上不存在其他可用识别服务,该方案无法生效。 - 方案2:应用内集成独立语音识别能力,完全不依赖系统
SpeechRecognizer
这是不需要启用com.google.android.googlequicksearchbox的最稳妥实现,完全不依赖系统预装应用组件:- 离线场景可集成端侧开源语音识别库,将识别模型直接打包到APK内,不需要调用系统服务
- 在线场景可自行实现录音、音频流编码上传、识别结果解析逻辑,对接语音识别服务端接口即可
- 代码问题修正:贴出的初始化代码存在语法错误,
ComponentName.unflattenFromString调用行末尾多写了一个右括号,会直接导致编译失败,需要先删除多余括号。
内容的提问来源于stack exchange,提问作者Jake Arvizu
相关产品推荐
相关产品推荐

