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

使用Python-for-Android和Buildozer打包Flask应用的麦克风权限问题

解决Web Speech Recognition在Flask打包APK中提示"not-allowed"的问题

以下是针对性的排查和解决方案:

1. 配置WebView支持媒体权限

打包后的APK通过WebView加载Flask页面,默认WebView未开启媒体访问权限,需在Python代码中添加权限处理逻辑:

from android.webkit import WebView, WebChromeClient, PermissionRequest
from android.permissions import Permission, request_permissions
from android.app import Activity

# 自定义WebChromeClient处理媒体权限请求
class PermissionHandler(WebChromeClient):
    def onPermissionRequest(self, request):
        request.grant(request.getResources())

def init_webview():
    webview = WebView(None)
    # 启用JavaScript
    webview.getSettings().setJavaScriptEnabled(True)
    # 取消媒体播放需用户手势的限制
    webview.getSettings().setMediaPlaybackRequiresUserGesture(False)
    # 绑定权限处理器
    webview.setWebChromeClient(PermissionHandler())
    # 加载本地Flask服务
    webview.loadUrl("http://localhost:5000")
    
    activity = Activity.mActivity
    activity.setContentView(webview)

# 先请求权限,成功后初始化WebView
def check_permissions(permissions, grants):
    if all(grants):
        init_webview()
    else:
        from android.widget import Toast
        Toast.makeText(Activity.mActivity, "需授予麦克风权限才能使用语音识别", Toast.LENGTH_LONG).show()

request_permissions(
    [Permission.INTERNET, Permission.MODIFY_AUDIO_SETTINGS, Permission.RECORD_AUDIO],
    check_permissions
)

2. 完善Buildozer.spec配置

除权限外,需确保启用WebView并适配Android 11的权限规则:

[app]
android.webview_enabled = True
android.permissions = INTERNET,RECORD_AUDIO,MODIFY_AUDIO_SETTINGS
android.api = 30
requirements = python3,flask,android,pyjnius

3. 验证权限实际授予状态

  • 安装APK后,前往系统设置→应用→你的APK→权限,确认麦克风权限已被允许
  • 若权限请求弹窗未触发,检查代码中request_permissions是否在应用启动时优先调用

4. 处理安全上下文限制

Web Speech API要求安全上下文(HTTPS),本地localhost可例外,若仍报错,可在WebView中允许混合内容:

webview.getSettings().setMixedContentMode(0)  # 0表示允许所有混合内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:03:32