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

Android 13中获取Google SpeechRecognizer支持语言的问题求助

Android 13 语音识别支持语言获取问题解决

问题背景

Android 13之前可通过RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS广播接收器获取语音识别支持语言,但Android 13中该广播返回的extras为空;使用Android 13新增的SpeechRecognizer.checkRecognitionSupport() API时,始终触发onError回调,错误码为14,仅三星AiAiSpeechRecognitionService可正常工作。

原因分析

  1. 广播接口废弃:Android 13开始限制ACTION_GET_LANGUAGE_DETAILS广播的功能,官方明确要求使用checkRecognitionSupport() API替代旧广播方案。
  2. 错误码14对应ERROR_RECOGNIZER_BUSY:表示语音识别服务正忙,或请求参数不合法导致服务无法处理。

解决步骤

1. 确保请求Intent参数合法

checkRecognitionSupport()依赖合法的识别Intent,必须包含EXTRA_LANGUAGE_MODEL等核心参数,否则服务会拒绝处理请求。示例代码:

// 构建合法的测试Intent
Intent testIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
// 设置语言模型,必须指定
testIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
// 可选:指定目标语言
testIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault().toLanguageTag());
// 调用API
SpeechRecognizer speechRecognizer = SpeechRecognizer.createSpeechRecognizer(context);
speechRecognizer.checkRecognitionSupport(testIntent, Executors.newSingleThreadExecutor(), new RecognitionSupportCallback() {
    @Override
    public void onSupportResult(@NonNull RecognitionSupport recognitionSupport) {
        // 获取支持的语言列表
        List<Locale> supportedLocales = recognitionSupport.getSupportedLocales();
        // 获取偏好语言
        Locale preferredLocale = recognitionSupport.getPreferredLocale();
    }

    @Override
    public void onError(int error) {
        Log.e(LOG_TAG, "识别支持检查错误: " + error);
    }
});

2. 处理权限与初始化逻辑

  • Android 13及以上需要动态申请RECORD_AUDIO权限,否则语音识别服务无法正常工作:
// 检查并申请权限
if (ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_RECORD_AUDIO);
}
  • 确保SpeechRecognizer实例唯一,避免多个实例同时占用服务导致ERROR_RECOGNIZER_BUSY:使用单例模式管理,或在每次调用前销毁旧实例。

3. 适配第三方语音识别服务

部分厂商的语音识别服务可能未完全实现checkRecognitionSupport()接口,可通过以下方式降级处理:

  • 查询系统中已安装的语音识别服务组件:
PackageManager pm = context.getPackageManager();
Intent serviceIntent = new Intent(RecognitionService.SERVICE_INTERFACE);
List<ResolveInfo> services = pm.queryIntentServices(serviceIntent, 0);
for (ResolveInfo info : services) {
    // 可尝试针对特定服务做适配
    String serviceName = info.serviceInfo.name;
}
  • 提示用户安装官方语音识别服务(如Google语音识别)作为备选方案。

4. 错误码14的额外排查

  • 检查是否有其他应用正在使用语音识别服务,导致当前请求被阻塞;
  • 重启设备后重试,排除临时服务异常;
  • 针对特定设备,查看厂商是否有相关系统设置限制语音识别服务的调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:56:14