我无法获得存储以xamarin形式读写的权限

问题描述 投票:0回答:1

我的应用程序我正在尝试获取读取和写入的存储权限。我使用下面的代码来解决问题,但我无法获得权限弹出窗口,结果总是得到 Xamarin.Essentials.PermissionStatus.Denied 。我使用的是 VS 2022,目标 Android 版本是 14。

权限接口(IReadWritePermission):

public interface IReadWritePermission
{        
    Task<PermissionStatus> CheckStatusAsync();
    Task<PermissionStatus> RequestAsync();
}

共享代码中的权限使用:

var readWritePermission = DependencyService.Get<IReadWritePermission>();
var status = await readWritePermission.CheckStatusAsync();
if (status != PermissionStatus.Granted)
{
    status = await readWritePermission.RequestAsync();
}

安卓代码

using Xamarin.Forms;

    [assembly:Dependency(typeof(ReadWriteStoragePermission))]
    
    namespace ATSDriver.Droid
    {
        public class ReadWriteStoragePermission :  Xamarin.Essentials.Permissions.BasePlatformPermission, IReadWritePermission
        {
            public override (string androidPermission, bool isRuntime)[] RequiredPermissions => new List<(string androidPermission, bool isRuntime)>
            {
                (Android.Manifest.Permission.ReadExternalStorage, true),
                (Android.Manifest.Permission.WriteExternalStorage, true)
            }.ToArray();
    
            public async Task<PermissionStatus> CheckStatusAsync()
            {
                return await Permissions.CheckStatusAsync<ReadWriteStoragePermission>();
            }
    
            public async Task<PermissionStatus> RequestAsync()
            {
                return await Permissions.RequestAsync<ReadWriteStoragePermission>();
            }
        }
    }

MainActivity.cs

DependencyService.Register<IReadWritePermission, ReadWriteStoragePermission>();

选项2

直接在共享代码中:-

var statusSto = await Xamarin.Essentials.Permissions.CheckStatusAsync<Permissions.StorageRead>();
if (statusSto != Xamarin.Essentials.PermissionStatus.Granted)
{
    statusSto = await Xamarin.Essentials.Permissions.RequestAsync<Permissions.StorageRead>();
}

感谢您的回复和解决方案

xamarin.forms android-permissions
1个回答
0
投票

如果您的应用面向 Android 13 或更高版本,并且需要访问其他应用创建的媒体文件,则必须请求以下一项或多项精细媒体权限,而不是 READ_EXTERNAL_STORAGE 权限:

READ_MEDIA_IMAGES
READ_MEDIA_VIDEO
READ_MEDIA_AUDIO
.

您可以在该类中更改权限代码。

using Xamarin.Forms;

    [assembly:Dependency(typeof(ReadWriteStoragePermission))]
    
    namespace ATSDriver.Droid
    {
        public class ReadWriteStoragePermission :  Xamarin.Essentials.Permissions.BasePlatformPermission, IReadWritePermission
        {
            public override (string androidPermission, bool isRuntime)[] RequiredPermissions => new List<(string androidPermission, bool isRuntime)>
            {
                (Android.Manifest.Permission.ReadExternalStorage, true),
                (Android.Manifest.Permission.WriteExternalStorage, true)
            }.ToArray();
    
            public async Task<PermissionStatus> CheckStatusAsync()
            {
                return await Permissions.CheckStatusAsync<ReadWriteStoragePermission>();
            }
    
            public async Task<PermissionStatus> RequestAsync()
            {
                return await Permissions.RequestAsync<ReadWriteStoragePermission>();
            }
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.