微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么相机无法在Xamarin WebView上使用?

如何解决为什么相机无法在Xamarin WebView上使用?

我有一个简单的Xamarin页面,该页面在WebView中调用WebRTC页面: 该页面可以在同一Android设备上的Chrome上正常运行,但不能在WebView上正常运行,因为没有错误

AndroidManifest.xaml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.dpwcam">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
    <application android:label="DPWCAM.Android" android:networkSecurityConfig="@xml/network_security_config"></application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUdio" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MODIFY_AUdio_SETTINGS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-feature android:name="android.hardware.camera" android:required="true" />
</manifest>

MyWebVieWrenderer.cs:

[assembly: ExportRenderer(typeof(MyWebView),typeof(MyWebVieWrenderer))]
namespace DPWCAM.Droid
{
    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.Settings.UserAgentString = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0";
            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());

                });
            }

            public override bool OnConsoleMessage(ConsoleMessage consoleMessage)
            {
                var message = consoleMessage.Message();
                return base.OnConsoleMessage(consoleMessage);
            }
        }
    }
}

MyWebView.cs:

public class MyWebView : WebView
    {
    }

WebViewPage.xaml:

<StackLayout>
            <Entry x:Name="CameraName"></Entry>
            <Button x:Name="Navigate" Clicked="NavigateButton_Clicked" Text="Save"></Button>
            <dpwcam:MyWebView
                x:Name="webView"
                HeightRequest="500"
                WidthRequest="500"/>
        </StackLayout>

WebViewPage.xaml.cs:

void NavigateButton_Clicked(object sender,EventArgs args)
        {
            _cameraName = CameraName.Text;
            
            webView.source = $"https://cam.AnyDomain.com.tr?Name={_cameraName}";
            
        }

然后,我开始使用Google搜索来寻找答案,但没有找到适合我的情况的解决方案。我找到的所有答案都是关于我已经做过的权限

那怎么了?谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。