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

如何在Android Kotlin/Java中限制用户直接访问Android/data/package_name/文件夹

限制Android/data下应用目录直接访问的实现方案

1. 依托Scoped Storage(API 30+)

从Android 11开始,系统默认启用Scoped Storage机制,其他应用(含文件管理器)无法直接访问你的应用专属的Android/data/[package_name]目录——除非你的应用主动通过ContentProvider共享文件。只要不主动暴露文件,普通文件管理器根本看不到这个目录。

配置要点

确保AndroidManifest.xml中未申请MANAGE_EXTERNAL_STORAGE权限;若targetSdkVersion≥30,无需申请外部存储权限即可正常访问自身的Android/data目录。

2. API 29及以下设备的补充防护

对于Android 10及更低版本,系统未强制Scoped Storage,可通过以下方式增强限制:

a. 设置目录私有权限

创建目录或文件时,将权限设为仅应用自身可读可写,其他用户无任何权限:

  • Kotlin代码示例:
val folder = File(getExternalFilesDir(null), "file_folder")
if (!folder.exists()) {
    folder.mkdirs()
    // 设置权限:仅所有者可读可写,组和其他用户无权限
    folder.setPermissions(0600)
}
  • Java代码示例:
File folder = new File(getExternalFilesDir(null), "file_folder");
if (!folder.exists()) {
    folder.mkdirs();
    folder.setPermissions(0600);
}

设置后,即便文件管理器拥有外部存储权限,也无法读取或修改该目录内容。

b. 禁止通过MediaStore共享文件

不要将该目录下的文件注册到系统媒体库,否则文件管理器可通过媒体库路径访问这些文件。

3. 额外注意事项

  • 不要通过ACTION_OPEN_DOCUMENT或ACTION_GET_CONTENT等Intent让用户选择该目录下的文件,这会间接授予其他应用访问权限。
  • 若必须共享文件,使用FileProvider生成临时URI,仅授予目标应用临时访问权限,避免全局暴露。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:43:12