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

如何在Android 10上不使用SAF将文件保存至二级外部存储卷?

解决Android 10(SDK 29)二级外部存储根目录写入权限问题

问题原因

android:requestLegacyExternalStorage="true" 仅对主外部存储生效,在Android 10(SDK 29)中,即使开启该标志,WRITE_EXTERNAL_STORAGE 权限也无法授予对二级外部存储(如SD卡)根目录的写入权限。此外,MANAGE_EXTERNAL_STORAGE 权限是Android 11(SDK 30)才引入的,在Android 10上完全无效。

无需SAF的解决方法

方法1:将targetSdkVersion降至28

当应用的 targetSdkVersion 设置为28或更低时,Android 10会自动采用传统存储模型,此时 WRITE_EXTERNAL_STORAGE 权限将覆盖所有外部存储(包括二级存储)的根目录写入权限。

修改 build.gradle(或 build.gradle.kts)中的配置:

android {
    defaultConfig {
        targetSdkVersion 28
        // 其他配置...
    }
}

注意:此方法会限制你使用Android 10及以上版本的专属API,但能完全满足你在Android 10上写入二级存储根目录的需求。

方法2:使用二级存储的应用专属目录(非根目录)

如果你无法降低targetSdkVersion,可写入二级存储上的应用专属目录(无需额外权限),但这不符合你写入根目录的需求,仅作补充说明:

// 获取二级存储的应用专属目录
File secondaryAppDir = context.getExternalFilesDirs(null)[1];
if (secondaryAppDir != null) {
    // 在此目录下创建文件
    File file = new File(secondaryAppDir, "test.txt");
    // 写入操作...
}

总结

若必须写入二级外部存储根目录且不使用SAF,将targetSdkVersion降至28是唯一可行的官方解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:06:03