我的应用程序我正在尝试获取读取和写入的存储权限。我使用下面的代码来解决问题,但我无法获得权限弹出窗口,结果总是得到 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>();
}
感谢您的回复和解决方案
如果您的应用面向 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>();
}
}
}