You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已授予权限后SpeechRecognizer点击麦克风无响应不监听问题咨询

安卓SpeechRecognizer无响应问题排查原因

1. 核心参数配置错误(最高概率)

当前代码存在明显的参数传值错误:RecognizerIntent.EXTRA_LANGUAGE_MODEL 用于指定识别的语言模型,合法值只能是 RecognizerIntent.LANGUAGE_MODEL_FREE_FORM(自由格式识别)或 RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH(网页搜索场景识别),代码中错误传入了语言代码"en-US",导致系统无法识别该Intent,直接无响应。
修复代码示例:

speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

2. RecognitionListener实现不完整

代码中仅简写了RecognitionListener的创建逻辑,若未重写onError(int errorCode)回调方法,无法拿到具体报错信息。常见错误码包括:

  • ERROR_INSUFFICIENT_PERMISSIONS:权限缺失(即使你认为已授权,也可能是系统权限拦截)
  • ERROR_NO_MATCH:无匹配识别结果
  • ERROR_NETWORK:网络异常(多数识别服务需要联网)
    必须在onError中添加日志打印,快速定位问题。

3. 设备无可用语音识别服务

调用SpeechRecognizer.createSpeechRecognizer()前需要先判断当前设备是否存在可用的识别服务:

if (!SpeechRecognizer.isRecognitionAvailable(context)) {
    // 提示用户安装第三方语音识别服务(如讯飞、百度语音、谷歌语音识别等)
}

国内多数安卓机型默认未预装谷歌语音识别服务,若未安装第三方服务,createSpeechRecognizer会返回null,调用方法自然无响应。如果设备有多个识别服务,也可指定具体服务的包名创建实例,避免使用默认服务异常。

4. 权限申请逻辑不符合要求

  • 安卓6.0及以上版本,RECORD_AUDIO属于危险权限,仅在AndroidManifest中声明无效,必须动态申请,且需要在用户确认授权成功后再初始化SpeechRecognizer,不能在Activity启动时未授权就提前初始化。
  • 国内定制ROM(小米、华为、vivo等)有额外的权限拦截逻辑,即使动态申请授权成功,也可能在系统权限页被限制“录音权限仅前台可用”“禁止录音”,需要引导用户到系统应用权限页确认授权状态。

5. 线程调用错误

SpeechRecognizer的初始化、startListening、stopListening方法必须在主线程调用,若在子线程调用会无响应且不抛出明显报错。

6. 实例被系统回收

若SpeechRecognizer实例被定义为局部变量,方法执行完成后会被GC回收,无法保持监听状态,必须定义为Activity/Fragment的成员变量,保持强引用。


内容的提问来源于stack exchange,提问作者Himanshu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 23:57:04