Камера в Xamarin WebView - PullRequest
       34

Камера в Xamarin WebView

0 голосов
/ 27 мая 2018

У меня есть простая страница Xamarin с WebView, которая вызывает тестовую страницу 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;

Что не так?

Спасибо

1 Ответ

0 голосов
/ 28 мая 2018

О NotAllowedError, от здесь :

Пользователь указал, что текущему экземпляру просмотра не разрешен доступ к устройству;или пользователь отказал в доступе для текущего сеанса;или пользователь запретил весь доступ к пользовательским мультимедийным устройствам в глобальном масштабе.


Вам необходим пользовательский WebView для переопределения 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());

                        });

            }
        }

    }

}

Здесь , я предоставил вам демотестировать.Камера должна работать на вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...