You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:10:24