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

Android WebView中调用getUserMedia报Permission Denied错误求助

Android WebView中getUserMedia抛出"Permission Denied"的排查方案
  • WebView权限配置缺失
    首先检查AndroidManifest.xml是否声明了必要的硬件权限:

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    

    针对Android 6.0及以上系统,仅清单声明不够,必须在代码中调用requestPermissions()动态申请相机和麦克风权限,获取用户授权后再加载WebView页面。

  • WebView核心设置未开启
    WebView必须启用JS及媒体相关配置才能支持WebRTC:

    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true); // WebRTC依赖JS运行
    webSettings.setDomStorageEnabled(true); // 开启DOM存储支持WebRTC状态记录
    webSettings.setMediaPlaybackRequiresUserGesture(false); // 允许非用户手势触发媒体权限请求
    

    Android 11+还需额外开启文件/内容访问权限:

    webSettings.setAllowFileAccess(true);
    webSettings.setAllowContentAccess(true);
    
  • 安全上下文验证
    getUserMedia强制要求HTTPS安全上下文,WebView加载的页面必须是HTTPS协议。本地调试使用自签名证书时,需配置WebView信任该证书,否则会被判定为非安全上下文直接拒绝权限。

  • WebChromeClient权限请求处理
    若自定义了WebChromeClient,必须正确处理权限请求回调,否则WebView不会触发系统权限弹窗:

    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onPermissionRequest(PermissionRequest request) {
            request.grant(request.getResources()); // 授权页面请求的所有媒体资源
        }
    });
    

    未重写该方法时,WebView可能默认拒绝权限请求。

  • WebView版本与硬件限制
    检查设备WebView内核版本,建议使用Chrome 60以上版本的WebView(对应Android 7.0+系统),旧版本内核可能存在WebRTC兼容性问题。同时确认设备有可用的相机和麦克风硬件,模拟器或无硬件支持的设备会直接拒绝权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 04:54:52