.NET MAUI中AndroidManifest.xml权限设置不保存问题咨询
问题原因及解决方法
一、权限勾选不保存+显示红色的原因
- 废弃权限标记:
READ_EXTERNAL_STORAGE在Android 13(API 33)及以上版本已被官方废弃,Android Studio的可视化权限编辑器会将这类权限标红,并且不会保存勾选状态——因为系统不再推荐使用该权限,编辑器会自动过滤废弃权限的可视化操作。 - XML与编辑器不同步:即使你手动在
AndroidManifest.xml中添加了该权限,可视化编辑器也不会同步显示勾选状态,但XML中的权限声明实际是有效的(仅在目标SDK低于33时生效)。
二、文件夹选择器权限问题的解决方法
情况1:项目目标SDK为Android 13+(API 33及以上)
- 无需
READ_EXTERNAL_STORAGE:Maui官方的FolderPicker(包括CommunityToolkit.Maui中的实现)会调用系统原生文件选择器,用户选择文件夹后会自动获得该文件夹的访问权限,不需要申请全局存储权限。如果你的文件夹选择逻辑是自定义的,建议改用系统的ACTION_OPEN_DOCUMENT_TREE意图,同样无需额外权限。 - 特殊场景需特殊权限:如果必须访问设备上的所有公共目录,需要申请
MANAGE_EXTERNAL_STORAGE权限,但这个权限属于特殊权限,无法通过代码自动请求,必须引导用户到系统设置手动开启(路径:设置 > 应用 > 你的应用 > 权限 > 所有文件访问权限)。同时在AndroidManifest.xml中声明:<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
情况2:项目目标SDK低于Android 13(API 32及以下)
- 直接编辑XML文件:跳过可视化编辑器的勾选操作,手动在
AndroidManifest.xml的<manifest>标签下添加权限声明,保存即可生效:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> - 代码中动态请求权限:在使用文件夹选择器前,通过Maui的权限API请求存储读取权限:
var status = await Permissions.CheckStatusAsync<Permissions.StorageRead>(); if (status != PermissionStatus.Granted) { status = await Permissions.RequestAsync<Permissions.StorageRead>(); }
额外排查点
- 检查
AndroidManifest.xml中权限声明的位置,确保是在<manifest>根标签下,而非<application>标签内部。 - 清理Android Studio缓存(File > Invalidate Caches... > Invalidate and Restart),解决编辑器显示异常的问题。
内容的提问来源于stack exchange,提问作者an22
相关产品推荐
相关产品推荐

