【问题标题】:How to make camera work in Xamarin Webview?如何使相机在 Xamarin Webview 中工作?
【发布时间】:2021-11-19 00:43:44
【问题描述】:

我在 Xamarin WebView 中加载了一个网页。

该页面应该打开设备相机。该页面在我的笔记本电脑上正常工作并显示相机图像。但是,在 Xamarin Android 的 WebView 中使用时,同一页面不会显示相机。已授予相机访问权限。

这是我的代码:

我有一个自定义 webrenderer 如下:

[assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebView))]
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());

                });

            }
        }

    }

}

这是我的 MainActivity.cs:

namespace SS.Droid
{
    [Activity(Label = "Soirée Sympa", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
         

        }
        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }
       
    }
} 

Android 清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="5" android:versionName="5.1" package="somthing.app" android:installLocation="auto">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29" />
    <application android:label="MyApp" android:icon="@mipmap/launcher_foreground"></application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CAMERA" />
</manifest>

没有出现错误,并且相机既不在模拟器中也不在物理设备中显示:

请问有人有解决办法吗?

谢谢, 干杯

【问题讨论】:

    标签: android xamarin


    【解决方案1】:

    我以前做过。您可以在 OnAppearing() 方法中请求权限。我过去在链接中请求权限的方式是插件。我重新检查了下面提供的代码以检查相机。它仍然有效。

    https://test.webrtc.org/
    

    我之前做过的线程: Xamarin - Requesting camera permissions in WebView

    目前,您可以将 Xamarin.Essentials 用于权限。 https://docs.microsoft.com/en-us/xamarin/essentials/permissions?tabs=android

    【讨论】:

      猜你喜欢
      • 2018-11-06
      • 2018-07-14
      • 2020-05-03
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      相关资源
      最近更新 更多