You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android 10升级至11后,preserveLegacyExternalStorage设为true但Environment.isExternalStorageLegacy()返回false的原因排查

Android 10升级到11后Legacy Storage失效的可能原因

下面是几个可能导致Environment.isExternalStorageLegacy()返回false的常见原因,你可以逐一排查:

  • 应用在Android 10上未获取WRITE_EXTERNAL_STORAGE权限
    preserveLegacyExternalStorage的核心作用是保留应用在Android 10时期已获得的旧版存储访问权限。如果你的应用在Android 10上从来没请求过WRITE_EXTERNAL_STORAGE,或者用户拒绝了这个权限,那么当系统升级到Android 11后,系统没有可保留的legacy权限状态,自然会返回false。你可以检查应用在Android 10上的权限授予记录确认这一点。

  • 应用在系统升级后被重装或清除过数据
    这个属性的生效依赖于应用安装后的权限状态记录。如果系统升级后,你卸载重装了应用,或者手动清除了应用的数据,系统会重置应用的存储权限配置,preserveLegacyExternalStorage的设置就会失效,此时应用会按照Android 11的默认存储规则运行,legacy模式也就不再生效。

  • preserveLegacyExternalStorage配置有误
    一定要确保这个属性是写在AndroidManifest.xml<application>标签下,并且拼写完全正确(注意大小写,比如ExternalStorage的S是大写)。如果不小心把它放在了<activity>或者其他标签里,或者拼写错误,系统根本不会识别这个配置,自然不会启用legacy存储模式。

  • 应用目标SDK版本的变更影响
    如果在系统升级到Android 11后,你更新了应用版本并将targetSdkVersion升级到30(Android 11),但没有正确保留preserveLegacyExternalStorage配置,或者在更新过程中系统判定应用已适配Scoped Storage,那么legacy模式可能会被自动关闭。另外,如果应用在Android 10上的targetSdkVersion高于29,即使设置了requestLegacyExternalStorage,升级到11后也可能无法保留legacy状态。

  • 定制ROM的特殊权限逻辑
    部分安卓厂商的定制ROM会对系统权限做自定义处理,有些可能在系统升级时自动重置应用的存储权限,忽略preserveLegacyExternalStorage的配置。这种情况下你可以尝试在其他原生Android设备上复现问题,来排除厂商定制的影响。

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

火山引擎 最新活动