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

使用KivyMD开发APK调用SpeechRecognition库时麦克风报错问题求助

解决SpeechRecognition在KivyMD安卓应用中的未知值错误

1. 补全buildozer.spec的依赖与权限配置

你的buildozer.spec缺少speechrecognition核心依赖,同时需要显式声明安卓系统权限:

  • 更新requirements项,加入所需依赖:
requirements = python3,kivy,kivymd,android,speechrecognition,pyjnius
  • 添加安卓权限(无此项则新增):
android.permissions = RECORD_AUDIO, INTERNET

注:INTERNET权限用于Google在线语音识别API,若仅使用离线识别可忽略,但多数场景需保留。

2. 完善权限请求与校验逻辑

仅发起权限请求不足以保证操作时权限就绪,需在启动时请求并在识别前校验:

from kivy.utils import platform
from android.permissions import request_permissions, Permission, check_permission
from kivymd.app import MDApp
import speech_recognition as sr

class YourApp(MDApp):
    def on_start(self):
        if platform == 'android':
            # 启动时检查并请求权限
            required_perms = [Permission.RECORD_AUDIO, Permission.INTERNET]
            if not all(check_permission(p) for p in required_perms):
                request_permissions(required_perms, self._handle_perm_result)
    
    def _handle_perm_result(self, permissions, grant_results):
        # 权限请求结果处理,可添加用户提示
        for perm, granted in zip(permissions, grant_results):
            if perm == Permission.RECORD_AUDIO and not granted:
                # 提示用户必须授予录音权限才能使用功能
                pass

    def trigger_recognition(self):
        if platform == 'android':
            # 识别前再次校验权限
            if not check_permission(Permission.RECORD_AUDIO):
                return
        
        # 执行语音识别逻辑
        r = sr.Recognizer()
        with sr.Microphone() as source:
            r.adjust_for_ambient_noise(source)
            # 适配安卓设备,调整超时和时长参数
            audio = r.listen(source, timeout=5, phrase_time_limit=10)
        
        try:
            text = r.recognize_google(audio, language='zh-CN')
            # 处理识别结果
        except sr.UnknownValueError:
            # 捕获未知值错误,做友好提示
            pass
        except sr.RequestError as e:
            # 处理网络或API请求失败
            pass

3. 适配安卓麦克风输入参数

安卓设备的麦克风输入特性与桌面不同,调整listen()参数避免异常:

  • 设置timeout=5:给用户充足的说话准备时间
  • 设置phrase_time_limit=10:限制单次识别的最长时长
  • 必须调用adjust_for_ambient_noise():适配环境噪音,提升识别稳定性

4. 检查系统权限状态

若上述配置后仍报错,需确认安卓设备的系统设置中,应用已被授予录音权限——用户可能之前拒绝了权限请求且勾选了“不再询问”,需引导用户到系统设置开启。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:23:14