当前位置:首页 > 行业动态 > 正文

安卓存储路径文件夹

安卓存储路径文件夹详解

内部存储(Internal Storage)

  • 路径/data/data/<包名>/
  • 描述
    • 每个应用安装后独有的私有目录,其他应用无法直接访问。
    • 存储应用运行时产生的文件(如数据库、缓存、配置文件等)。
  • 读写权限

    应用默认拥有读写权限,无需额外申请。

    安卓存储路径文件夹  第1张

  • 常见子目录
    • /databases:存放SQLite数据库文件。
    • /shared_prefs:存储SharedPreferences文件。
    • /cache:临时缓存文件(系统可自动清理)。
    • /files:应用私有文件存储区。

外部存储(External Storage)

  • 路径
    • 传统路径:/sdcard/(Android 10前常用)。
    • 标准路径:/storage/emulated/0/(Android 4.4+)。
  • 描述
    • 公共存储空间,所有应用均可读写(需声明权限)。
    • 用户可手动管理文件(如通过文件管理器)。
  • 读写权限
    • 需在AndroidManifest.xml中声明READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE
    • Android 13+需动态申请权限。

常见数据目录

环境变量 实际路径 用途
EXTERNAL_STORAGE /storage/emulated/0/ 外部存储根目录
EXTERNAL_DOWNLOADS /storage/emulated/0/Download/ 下载文件存放目录
EXTERNAL_DCIM /storage/emulated/0/DCIM/ 相机拍摄图片/视频目录
EXTERNAL_PICTURES /storage/emulated/0/Pictures/ 图片存储目录
APP_DATA_DIR /data/data/<包名>/ 应用私有数据目录
APP_CACHE_DIR /data/data/<包名>/cache/ 应用缓存目录

Android版本差异

  • Android 10(Q)及以上
    • 强制启用分区存储(Scoped Storage),应用默认只能访问自己的私有目录。
    • 访问公共目录需通过Storage Access Framework或声明MANAGE_EXTERNAL_STORAGE权限。
  • Android 11+
    • 进一步限制对/sdcard的直接访问,推荐使用MediaStore API操作媒体文件。

特殊路径说明

  1. 应用专属外部存储目录
    • 通过getExternalFilesDir()获取,路径类似/storage/emulated/0/Android/data/<包名>/
    • 无需申请存储权限,数据仅当前应用可见。
  2. 系统根目录
    • /system:系统核心文件(需Root权限)。
    • /proc:进程信息虚拟文件系统。
    • /etc:系统配置文件。

相关问题与解答

问题1:如何判断设备是否存在SD卡?

解答
可通过Environment.getExternalStorageState()方法检测:

String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
    // SD卡已挂载,可读写
} else if (state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
    // SD卡仅支持读操作
} else {
    // SD卡不可用(未挂载或无权限)
}

问题2:Android 10+如何适配分区存储?

解答

  1. 使用Scoped Storage
    • 将文件保存到应用专属目录(如getExternalFilesDir()),无需额外权限。
    • 访问共享文件时,使用ACTION_OPEN_DOCUMENTACTION_CREATE_DOCUMENTIntent。
  2. 请求MANAGE_EXTERNAL_STORAGE权限
    • AndroidManifest.xml中声明<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    • 引导用户手动授权(需谨慎使用,可能被Google Play拒绝)。
0