.NET MAUI Android 13(API33)权限请求弹窗不显示问题求助
.NET MAUI适配Android 13时权限请求弹窗不显示问题求助
我在使用.NET MAUI开发适配Android 13(API 33)的应用时,遇到权限相关问题:请求用户授权的弹窗无法显示。查阅网上相关帖子后未找到解决办法,附上我的代码,希望能得到帮助。
AppShell代码
private void AppShell_Loaded(object sender, EventArgs e) { try { ProcessInit(); } catch (Exception ex) { throw new Exception(ex.Message); } } private async Task ProcessInit() { if (!RequestPermision.RequestStoragePermissionsBool()) { await Task.Run(async () => { await RequestPermision.RequestStoragePermissions(); }); } }
权限相关代码
适配Android 12及以下版本的权限类
public class ReadWriteStoragePermsLower12 : Permissions.BasePlatformPermission { public override (string androidPermission, bool isRuntime)[] RequiredPermissions => new List<(string androidPermission, bool isRuntime)> { ("android.permission.READ_EXTERNAL_STORAGE", true), ("android.permission.WRITE_EXTERNAL_STORAGE", true), ("android.permission.INTERNET", true) }.ToArray(); }
适配Android 13及以上版本的权限类
public class ReadWriteStoragePerms : Permissions.BasePlatformPermission { public override (string androidPermission, bool isRuntime)[] RequiredPermissions => new List<(string androidPermission, bool isRuntime)> { ("android.permission.READ_MEDIA_IMAGES", true), ("android.permission.READ_MEDIA_AUDIO", true), ("android.permission.READ_MEDIA_VIDEO", true), ("android.permission.INTERNET", true) }.ToArray(); }
权限状态检查与请求类
public class RequestPermision { private static IAppServices _services; public RequestPermision(IAppServices pServices) { _services = pServices; } public static async Task RequestStoragePermissions() { if (DeviceInfo.Platform != DevicePlatform.Android) return; var status = PermissionStatus.Unknown; if (DeviceInfo.Version.Major >= 13) { status = await Permissions.CheckStatusAsync<ReadWriteStoragePerms>(); if (status == PermissionStatus.Granted) { _services?.CallServiceListFolder(); return; } if (Permissions.ShouldShowRationale<ReadWriteStoragePerms>()) { await AlertPermissionDenited(); } status = await Permissions.RequestAsync<ReadWriteStoragePerms>(); if (status != PermissionStatus.Granted) { await AlertPermissionDenited(); } } else { status = await Permissions.CheckStatusAsync<ReadWriteStoragePermsLower12>(); if (status == PermissionStatus.Granted) { _services?.CallServiceListFolder(); return; } if (Permissions.ShouldShowRationale<ReadWriteStoragePermsLower12>()) { await AlertPermissionDenited(); } status = await Permissions.RequestAsync<ReadWriteStoragePermsLower12>(); if (status != PermissionStatus.Granted) { await AlertPermissionDenited(); } } } private static async Task AlertPermissionDenited() { await App.Current.MainPage.DisplayAlert("Needs permissions", "Permissions are required for the app to access system folders and files to perform conversions!", "OK"); } public static async Task<bool> RequestStoragePermissionsBool() { if (DeviceInfo.Platform != DevicePlatform.Android) return false; var status = PermissionStatus.Unknown; bool granted = false; if (DeviceInfo.Version.Major >= 13) { status = await Permissions.CheckStatusAsync<ReadWriteStoragePerms>(); if (status == PermissionStatus.Granted) granted = true; } else { status = await Permissions.CheckStatusAsync<ReadWriteStoragePermsLower12>(); if (status == PermissionStatus.Granted) granted = true; } return granted; } }
AndroidManifest.xml配置
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application android:allowBackup="true" android:icon="@mipmap/appicon" android:supportsRtl="true"></application> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="32" /> </manifest>
内容的提问来源于stack exchange,提问作者Leonardo Silva
相关产品推荐
相关产品推荐

