迁移旧Android项目遇com.google.android.voicesearch.DetailsReceiver缺失问题
问题解决方法
1. 移除com.google.android.voicesearch.DetailsReceiver相关清单配置
com.google.android.voicesearch包已被Google废弃并下架,不存在官方替代包,直接删除AndroidManifest.xml中引用该类的所有代码即可:
- 删除包含
android:name="com.google.android.voicesearch.DetailsReceiver"的<receiver>标签 - 删除与之关联的
<intent-filter>(如果是针对语音搜索相关的过滤规则)
删除后,Manifest的错误会直接消失,这个旧组件是早期语音搜索的遗留代码,当前Android版本已不再依赖。
2. 解决RecognizerIntent.ACTION_RECOGNIZE_SPEECH无法找到的问题
兼容性检查
Android 11及以上版本,调用语音识别前必须先通过PackageManager确认是否有可用的识别组件,避免找不到的情况:
PackageManager pm = getPackageManager(); List<ResolveInfo> activities = pm.queryIntentActivities( new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); if (activities.size() == 0) { // 无可用语音识别组件,提示用户安装或使用替代方案 }
官方替代方案
如果系统默认语音识别不可用,推荐使用Google ML Kit语音识别,这是Google官方维护的现代语音识别解决方案,支持Android 6.0(API 23)及以上版本,无需依赖已下架的旧包:
- 在build.gradle(Module)中添加依赖:
dependencies { implementation 'com.google.mlkit:speech-recognition:17.0.0' }
- 使用ML Kit进行语音识别的核心代码示例:
// 初始化语音识别器 SpeechRecognizer recognizer = SpeechRecognizer.create( new SpeechRecognizerOptions.Builder() .setLanguage("zh-CN") // 设置识别语言 .build()); // 设置识别回调 recognizer.addListener(new RecognitionListener() { @Override public void onResults(@NonNull RecognitionResults results) { String recognizedText = results.getTranscript(); // 处理识别结果 } @Override public void onError(@NonNull RecognitionError error) { // 处理识别错误 } // 实现其他回调方法(如onPartialResults等) }); // 开始识别(需要RECORD_AUDIO权限) recognizer.startListening();
权限说明
无论使用系统语音识别还是ML Kit,都需要在Manifest中添加录音权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Android 6.0及以上版本还需要动态申请该权限。
内容的提问来源于stack exchange,提问作者WebViewer
相关产品推荐
相关产品推荐

