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

Android 11:设备重启后保留MANAGE_EXTERNAL_STORAGE权限

MANAGE_EXTERNAL_STORAGE权限重启后丢失的问题排查与解决

正常情况下,Android系统中授予的MANAGE_EXTERNAL_STORAGE权限会持久保存,设备重启后不会自动失效。你遇到的重启后需重新授权的情况属于异常,可从以下几个方向排查解决:

一、确认权限状态的检查逻辑是否正确

很多时候不是权限真的丢失了,而是代码没有正确判断授权状态。不要依赖缓存或之前的授权记录,每次启动应用时都应该用系统API主动检查:

uses
  Androidapi.JNI.Os, Androidapi.Helpers;

function IsExternalStorageManagerAuthorized: Boolean;
begin
  // 直接调用系统API判断权限是否生效
  Result := TJEnvironment.JavaClass.isExternalStorageManager;
end;

在应用启动入口(比如主窗体的OnCreate事件)调用这个方法,只有返回False时才跳转设置页面申请权限。

二、检查项目的Android配置

  1. Target SDK版本要求:MANAGE_EXTERNAL_STORAGE是Android 11(API 30)引入的权限,你的Delphi项目必须将目标SDK版本设置为API 30或更高。
    • 打开Delphi项目选项 → Android平台 → 目标SDK版本,选择Android 11或更高版本。
  2. 清单文件配置:你已添加的权限配置是正确的,但需注意:
    • 无需额外添加android:requestLegacyExternalStorage="true"(该属性仅对API 29及以下生效,API 30+会被系统忽略)。
    • 确保清单中没有冲突的权限配置,比如重复声明或错误的权限名称。

三、排查设备ROM的特殊限制

部分定制Android ROM(如国内品牌的系统)可能对特殊权限有额外管控,比如自动清理“不常用应用”的权限:

  • 进入设备的应用权限设置页面,找到你的应用,确认所有文件访问权限是否被设置为“始终允许”。
  • 检查系统是否有“权限自动回收”“智能权限管理”之类的功能,将你的应用加入白名单。

四、排除代码中的异常逻辑

检查应用代码中是否存在意外重置权限的逻辑,比如误调用了权限撤销相关的API,或者在某些场景下主动清除了权限状态缓存。

如果以上所有步骤都排查完毕,仍然出现重启后权限丢失的情况,大概率是设备定制ROM的特殊问题。标准Android系统中,MANAGE_EXTERNAL_STORAGE权限一旦授予,会持久保存到应用的权限记录中,不会因重启失效。

内容的提问来源于stack exchange,提问作者Nils Eilers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:54:58