如何正确校验Android应用的ALL_FILES_ACCESS_PERMISSION权限
问题原因
你的权限校验失效是因为MANAGE_EXTERNAL_STORAGE(所有文件访问权限)是Android 11(API 30)引入的特殊权限,不属于普通运行时危险权限范畴,使用ActivityCompat.checkSelfPermission()无法正确获取它的授权状态——这个方法对这类特殊权限会固定返回未授权,才会出现已经给了权限仍然反复触发授权跳转的问题。
正确校验实现
Android系统为该权限提供了专属校验API,直接替换原有hasPermissionToManageFiles方法即可:
public static boolean hasPermissionToManageFiles(Context context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // 所有文件访问权限必须通过该专属API校验状态 return Environment.isExternalStorageManager(); } // Android 10及更低版本,声明对应存储权限后即可获得完整文件访问能力 return true; }
补充说明
- 你现有的权限申请跳转逻辑不需要修改:优先尝试直接跳转本应用的所有文件权限设置页,异常捕获后降级跳转所有文件权限的总列表页,这个兼容逻辑是正确的
- 建议在授权页跳转后的
onResume生命周期中重新调用该校验方法,确认用户完成授权后再执行后续文件操作 - 所有和该权限相关的API调用都要做好版本判断,避免低版本系统触发类找不到异常
内容的提问来源于stack exchange,提问作者Louis Chabert
相关产品推荐
相关产品推荐

