我有一个带有WebView的简单Xamarin页面,该视图调用WebRTC测试页面:
_webView = new WebView
{
Source = "https://test.webrtc.org/",
WidthRequest = 1000,
HeightRequest = 1000
};
var stackLayout = new StackLayout()
{
Orientation = StackOrientation.Vertical,
Padding = new Thickness(5, 20, 5, 10),
Children = { _webView }
};
Content = new StackLayout { Children = { stackLayout } };
该https://test.webrtc.org/页正常工作在Chrome上相同的Android模拟器,但不要上的WebView工作说“NotAllowedError”。
该应用程序具有所需的权限。以下代码(使用Plugin.Permissions)返回true:
var statusCamera = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Camera);
var statusMicrophone = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Microphone);
return statusCamera == PermissionStatus.Granted && statusMicrophone == PermissionStatus.Granted;
怎么了?
谢谢
关于NotAllowedError
,从这里:
用户已指定不允许当前浏览实例访问该设备。或者用户已拒绝访问当前会话;或用户已拒绝全局访问用户媒体设备。
您需要自定义aWebView
来覆盖WebChromeClient
的OnPermissionRequest
方法。
MyWebView
PCL中的课程:
public class MyWebView: WebView
{
}
MyWebViewRenderer
和MyWebClient
课程:
[assembly: ExportRenderer(typeof(App45.MyWebView), typeof(MyWebViewRenderer))]
namespace App45.Droid
{
public class MyWebViewRenderer : WebViewRenderer
{
Activity mContext;
public MyWebViewRenderer(Context context) : base(context)
{
this.mContext = context as Activity;
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
Control.Settings.JavaScriptEnabled = true;
Control.ClearCache(true);
Control.SetWebChromeClient(new MyWebClient(mContext));
}
public class MyWebClient : WebChromeClient
{
Activity mContext;
public MyWebClient(Activity context) {
this.mContext = context;
}
[TargetApi(Value = 21)]
public override void OnPermissionRequest(PermissionRequest request)
{
mContext.RunOnUiThread(() => {
request.Grant(request.GetResources());
});
}
}
}
}
在这里,我提供了一个演示供您测试。相机应该适合您。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句