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

Flutter:speech_to_text在Android API31模拟器初始化失败

解决speech_to_text在Android API 31模拟器初始化失败的排查点

以下是针对你遇到问题的具体排查方向:

  • 检查AndroidManifest的包可见性声明
    API 30及以上系统限制了应用对其他应用的可见性,speech_to_text需要调用系统语音识别服务,必须在AndroidManifest.xml的<manifest>标签内添加以下queries配置:

    <queries>
        <intent>
            <action android:name="android.speech.RecognitionService" />
        </intent>
    </queries>
    

    缺少这个声明会导致插件无法找到系统语音识别服务,直接初始化失败。

  • 查看初始化错误信息
    不要只判断初始化是否成功,要捕获插件返回的具体错误:

    final speech = SpeechToText();
    bool available = await speech.initialize(
      onError: (errorDetails) => print("初始化错误: ${errorDetails.errorMsg}"),
      onStatus: (status) => print("状态变化: $status"),
    );
    

    比如错误信息是no_speech_recognizers_available,说明系统没有可用的语音识别器。

  • 确认模拟器是否带Google服务(GMS)
    纯AOSP版本的模拟器默认没有Google语音识别服务,而Chrome网页端依赖Web Speech API不受此限制。建议切换到带Google Play的Pixel C API 31镜像,或者在模拟器中安装Google语音搜索应用。

  • 验证模拟器麦克风的实际可用性
    即使权限显示开启,也可能存在硬件连接问题:

    1. 打开模拟器自带的「录音机」APP,尝试录制音频;
    2. 检查模拟器设置→系统→语言和输入法→语音,是否有可用的语音识别引擎;
    3. 确认电脑麦克风正常工作,且模拟器音频设置中选择了正确的输入设备。
  • 检查动态权限申请逻辑
    虽然模拟器权限显示正常,但确保代码中在初始化前已正确申请RECORD_AUDIO权限。可以手动触发权限检查:

    import 'package:permission_handler/permission_handler.dart';
    
    Future<bool> checkMicPermission() async {
      var status = await Permission.microphone.status;
      if (!status.isGranted) {
        status = await Permission.microphone.request();
      }
      return status.isGranted;
    }
    

    先调用这个函数确认权限后,再初始化speech_to_text。

  • 检查插件与Flutter版本兼容性
    确认你使用的speech_to_text版本支持API 31,同时Flutter版本建议升级到3.0及以上,避免旧版本与Android 12(API31)的兼容性问题。

  • 排查混淆规则(若开启混淆)
    如果你的项目启用了代码混淆,需在proguard-rules.pro中添加插件的保留规则:

    -keep class com.google.android.gms.speech.** { *; }
    -keep class com.csdcorp.speech_to_text.** { *; }
    

    防止插件核心类被混淆导致初始化失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:51:09