Flutter应用重启后反复请求manageExternalStorage权限问题排查
问题描述
我在Flutter应用中使用permission_handler包,在main函数中请求应用所需的全部权限(包括location、systemAlertWindow、camera等)。首次安装应用时所有权限均已确认授予,但每次设备重启后,系统都会再次请求manageExternalStorage权限。应用运行于Android 12(API33),请问该问题的原因是什么?
AndroidManifest配置
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
main.dart代码片段
if (await Permission.storage.status != PermissionStatus.granted) { await Permission.storage.request(); } if (await Permission.manageExternalStorage.status != PermissionStatus.granted) { await Permission.manageExternalStorage.request(); } if (await Permission.systemAlertWindow.status != PermissionStatus.granted) { await Permission.systemAlertWindow.request(); } if (await Permission.location.status != PermissionStatus.granted) { await Permission.location.request(); }
问题原因
MANAGE_EXTERNAL_STORAGE是特殊权限,重启后不持久化
这个权限属于Android的高风险特殊权限,和相机、定位这类普通危险权限不一样。即使用户首次安装时已经授予,设备重启后系统不会保留这个授权状态,会重新要求用户确认。permission_handler的状态判断可能存在偏差
在Android 12环境下,permission_handler包对MANAGE_EXTERNAL_STORAGE权限状态的检测可能存在同步问题。设备重启后,系统实际的权限状态没有被插件正确读取,导致代码误判权限未授予,进而触发请求弹窗。Android 12的权限管控逻辑变更
Android 12对外部存储权限做了细化调整,虽然你在Manifest里声明了旧的读写权限,但MANAGE_EXTERNAL_STORAGE作为全存储访问的特殊权限,系统本身就会在重启后强制重新校验应用的权限需求,避免应用滥用全存储访问权。
内容的提问来源于stack exchange,提问作者Shajko
相关产品推荐
相关产品推荐

