Xamarin.forms Xamarin表单:摄像头和图库在android中不工作,显示权限异常

Xamarin.forms Xamarin表单:摄像头和图库在android中不工作,显示权限异常,xamarin.forms,permissions,camera,gallery,media,Xamarin.forms,Permissions,Camera,Gallery,Media,在我的项目中加载相机和图库时出现以下异常 摄像机 异常:>Plugin.Media.Abstractions.MediaPermissionException:需要摄像头权限。 在Plugin.Media.MediaImplementation+d_u17.MoveNext()[0x0009]处 画廊 未授予存储权限,正在请求。01-02 15:16:08.566 I/mono标准输出(12958):未授予存储权限,正在请求。 存储权限被拒绝。 01-02 15:16:08.567 I/mono

在我的项目中加载相机和图库时出现以下异常

摄像机

异常:>Plugin.Media.Abstractions.MediaPermissionException:需要摄像头权限。 在Plugin.Media.MediaImplementation+d_u17.MoveNext()[0x0009]处

画廊

未授予存储权限,正在请求。01-02 15:16:08.566 I/mono标准输出(12958):未授予存储权限,正在请求。 存储权限被拒绝。 01-02 15:16:08.567 I/mono标准输出(12958):存储权限被拒绝。[0:]异常:>Plugin.Media.Abstractions.MediaPermissionException:需要存储权限。 在Plugin.Media.MediaImplementation+d__16.MoveNext()[0x00091]中:0 ---来自引发异常的上一个位置的堆栈结束跟踪---

我已在清单文件中添加了所有权限。

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
清单文件中的提供商详细信息:

[assembly: UsesFeature("android.hardware.camera", Required = false)]
[assembly: UsesFeature("android.hardware.camera.autofocus", Required = false)]

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
 {
     PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
 }
<provider android:name="android.support.v4.content.FileProvider" android:authorities="{packagename}.fileprovider" android:exported="false" android:grantUriPermissions="true">
    <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data>
</provider>
 public async void OpenMygallery()
    {
        try
        {
            await CrossMedia.Current.Initialize();

            if (!CrossMedia.Current.IsPickPhotoSupported)
            {
                ShowAlert("No photos available.");
                return;
            }

            _mediaFile = await CrossMedia.Current.PickPhotoAsync();

            if (_mediaFile == null)
                return;

            tweetPicture.Source = ImageSource.FromStream(() =>
            {
                return _mediaFile.GetStream();
            });
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("Exception:>" + ex);
        }
    }

public async void OpenMyCamera()
    {
        try
        {
            await CrossMedia.Current.Initialize();

            if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
            {
                ShowAlert("No camera available.");
                return;
            }

            _mediaFile = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
            {
                Directory = "Sample",
                Name = "test.jpg",
                AllowCropping = true
            });

            if (_mediaFile == null)
                return;

            tweetPicture.Source = ImageSource.FromStream(() =>
            {
                return _mediaFile.GetStreamWithImageRotatedForExternalStorage();
            });
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("Exception:>" + ex);
        }
    }
错误信息:

[assembly: UsesFeature("android.hardware.camera", Required = false)]
[assembly: UsesFeature("android.hardware.camera.autofocus", Required = false)]

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
 {
     PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
 }
<provider android:name="android.support.v4.content.FileProvider" android:authorities="{packagename}.fileprovider" android:exported="false" android:grantUriPermissions="true">
    <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data>
</provider>
 public async void OpenMygallery()
    {
        try
        {
            await CrossMedia.Current.Initialize();

            if (!CrossMedia.Current.IsPickPhotoSupported)
            {
                ShowAlert("No photos available.");
                return;
            }

            _mediaFile = await CrossMedia.Current.PickPhotoAsync();

            if (_mediaFile == null)
                return;

            tweetPicture.Source = ImageSource.FromStream(() =>
            {
                return _mediaFile.GetStream();
            });
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("Exception:>" + ex);
        }
    }

public async void OpenMyCamera()
    {
        try
        {
            await CrossMedia.Current.Initialize();

            if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
            {
                ShowAlert("No camera available.");
                return;
            }

            _mediaFile = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
            {
                Directory = "Sample",
                Name = "test.jpg",
                AllowCropping = true
            });

            if (_mediaFile == null)
                return;

            tweetPicture.Source = ImageSource.FromStream(() =>
            {
                return _mediaFile.GetStreamWithImageRotatedForExternalStorage();
            });
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("Exception:>" + ex);
        }
    }
插件版本号:4.0.1.5

设备测试日期:Redmi Note 5 Pro

VS的版本:15.9.3

Xamarin版本:3.4.0.1008975


任何人请为此提出解决方案?

在manifest/info.plist文件中设置权限是第一步,但用户还需要授予这些权限

您可以随时添加权限检查,以确保用户确实允许应用程序访问相机/位置/照片/任何内容


查看有关权限检查和请求的信息。

用户需要主动授予应用程序访问这些功能的权限。您尝试过添加权限检查吗?@Tom否,我不尝试这样做,怎么做?查看有关请求权限的信息。@Tom我将尝试此操作并更新您的信息soon@Tom请将其作为您的答案发布,它正在工作