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

Xamarin WebView调用WebRTC测试页报NotAllowedError问题排查

解决Xamarin WebView加载WebRTC测试页出现NotAllowedError的问题

嘿,我来帮你排查这个问题~ 虽然你的应用已经拿到了相机和麦克风权限,但WebView本身还有几个关键配置没跟上,导致网页无法正常请求媒体权限,出现NotAllowedError。下面是具体的原因和解决办法:

1. 开启WebView的核心功能设置

Android WebView默认有很多限制,需要手动开启JavaScript、媒体访问等关键功能,否则WebRTC无法正常工作。给你的WebView补充这些配置:

_webView = new WebView 
{ 
    Source = "https://test.webrtc.org/", 
    WidthRequest = 1000, 
    HeightRequest = 1000 
};

// 配置WebView核心参数
_webView.Settings.JavaScriptEnabled = true; // WebRTC完全依赖JavaScript,必须开启
_webView.Settings.MediaPlaybackRequiresUserGesture = false; // 取消媒体播放需用户手动触发的限制,否则WebRTC无法自动发起权限请求
_webView.Settings.DomStorageEnabled = true; // 开启DOM存储,WebRTC需要存储会话相关信息
_webView.Settings.AllowFileAccess = true;
_webView.Settings.SetAppCacheEnabled(true);

var stackLayout = new StackLayout() 
{ 
    Orientation = StackOrientation.Vertical, 
    Padding = new Thickness(5, 20, 5, 10), 
    Children = { _webView } 
}; 
Content = new StackLayout { Children = { stackLayout } };

2. 自定义WebChromeClient处理网页权限请求

即使App已经获取了系统级的相机/麦克风权限,WebView内部的网页请求这些权限时,还需要通过WebChromeClient来完成授权。你需要创建一个自定义的客户端类来响应权限请求:

// 给WebView绑定自定义WebChromeClient
_webView.SetWebChromeClient(new CustomWebChromeClient());

// 自定义WebChromeClient实现权限授权
public class CustomWebChromeClient : WebChromeClient
{
    public override void OnPermissionRequest(PermissionRequest request)
    {
        // 允许网页请求的所有媒体资源权限(相机、麦克风等)
        request.Grant(request.GetResources());
    }
}

3. 检查AndroidManifest.xml的完整权限配置

除了你已经添加的相机和麦克风权限,还要确保清单文件里包含这些必要权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

<!-- 针对Android 10+的应用,添加这个配置确保资源加载正常 -->
<application android:usesCleartextTraffic="true">
    <!-- 其他应用配置 -->
</application>

为什么Chrome里能正常运行?

Chrome浏览器本身已经默认开启了这些媒体权限相关的配置,并且内置了成熟的权限处理逻辑;而Xamarin的WebView是一个轻量组件,所有的功能开关都需要开发者手动配置才能达到和Chrome一致的行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:10:23