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

Webview 上的摄像头权限

如何解决Webview 上的摄像头权限

我在 [1] 上托管了这个简单的 AR 应用程序:https://github.com/haybee1001/MyARExperiencee6tby 当我在手机浏览器上打开链接时,它会调用/请求相机许可并打开相机(完美运行)。

但是,我决定将此链接包含在 Xamarin WebView 中。但是,它抱怨许可。我已经在网上尝试了一些解决方案,但仍有库存。

请问我如何在 WebView 上获得/调用相机权限?有人可以通过我的应用链接向我展示一个可行的解决方案。

解决方法

在 Xamarin Forms 中进入 web 视图页面时,您可以在运行时请求 Camera 权限。

MainPage.xaml.cs

public MainPage()
{
    InitializeComponent();
    webView.Source = "your webview";
}

protected override void OnAppearing()
{
    base.OnAppearing();
    RunTimePermission();
}

public async void RunTimePermission()
{
    var status = PermissionStatus.Unknown;

    status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Camera);

    if (status != PermissionStatus.Granted)
    {

        status = await Utils.CheckPermissions(Permission.Camera);
    }

}

此处使用 Permissions Plugin 请求许可。

Utils.cs 代码如下:

public static class Utils
{
    public static async Task<PermissionStatus> CheckPermissions(Permission permission)
    {
        var permissionStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(permission);
        bool request = false;
        if (permissionStatus == PermissionStatus.Denied)
        {
            if (Device.RuntimePlatform == Device.Android)
            {

                var title = $"{permission} Permission";
                var question = $"To use this plugin the {permission} permission is required. Please go into Settings and turn on {permission} for the app.";
                var positive = "Settings";
                var negative = "Maybe Later";
                var task = Application.Current?.MainPage?.DisplayAlert(title,question,positive,negative);
                if (task == null)
                    return permissionStatus;

                var result = await task;
                if (result)
                {
                    CrossPermissions.Current.OpenAppSettings();
                }

                return permissionStatus;
            }

            request = true;

        }

        if (request || permissionStatus != PermissionStatus.Granted)
        {
            var newStatus = await CrossPermissions.Current.RequestPermissionsAsync(permission);

            if (!newStatus.ContainsKey(permission))
            {
                return permissionStatus;
            }

            permissionStatus = newStatus[permission];

            if (newStatus[permission] != PermissionStatus.Granted)
            {
                permissionStatus = newStatus[permission];
                var title = $"{permission} Permission";
                var question = $"To use the plugin the {permission} permission is required.";
                var positive = "Settings";
                var negative = "Maybe Later";
                var task = Application.Current?.MainPage?.DisplayAlert(title,negative);
                if (task == null)
                    return permissionStatus;

                var result = await task;
                if (result)
                {
                    CrossPermissions.Current.OpenAppSettings();
                }
                return permissionStatus;
            }
        }

        return permissionStatus;
    }
}

MainActivity.cs 中,在 OnCreate 方法中添加代码。

Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this,savedInstanceState);
MainActivity.cs 中需要

OnRequestPermissionsResult 方法。

public override void OnRequestPermissionsResult(int requestCode,string[] permissions,[GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
    PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode,permissions,grantResults);
    base.OnRequestPermissionsResult(requestCode,grantResults);
}

不要忘记在AndroidManifest.xml中添加用户权限。

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

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