Android内部存储和外部存储的几个概念(内部存储空间和外部存储空间、SD卡、storage/emulated、MediaProvider的internal.db与external.db)

3624 admin
世界杯历届冠军名单

所有Android设备都有两个文件存储区域:内部存储空间和外部存储空间,这些名称是在Android早期确定,那时大部分设备都提供内置的非易失性内存 (内部存储空间)以及可移动存储媒介 (如Micro SD卡,提供外部存储空间),现在很多设备将永久性存储空间划分为单独的“内部”和“外部”分区,因此,即使没有可移动存储媒介,这两种存储空间也始终存在

1. 内部存储路径

指的是 data/user/0/xxx(或data/data/xxx)

//-- /data/user/0/com.xxx.xxx/files

String str2 = getFilesDir().getAbsolutePath();

//-- /data/user/0/com.xxx.xxx/cache

String str3 = getCacheDir().getAbsolutePath();

//-- /data

String str1 = Environment.getDataDirectory().getAbsolutePath();

附录

//保存至内部存储的文件是应用私有文件,除非有Root访问权限否则其他应用、用户不能访问这些文件,

//当用户卸载您的应用时,保存在内部存储中的文件也将随之移除

2. 虚拟外部存储路径(又被称为内部共享存储空间)

指的是 sdcard(或/storage/emulated/0) ,sdcard实际路径如下:

lrw-r--r-- 1 root root 21 2008-12-31 11:00 sdcard -> /storage/self/primary

lrwxrwxrwx 1 root root 19 2020-01-04 03:23 /storage/self/primary -> /mnt/user/0/primary

lrwxrwxrwx 1 root reserved_disk 19 2020-01-04 03:24 /mnt/user/0/primary -> /storage/emulated/0

mount 信息如下:

/dev/block/dm-0 on /data type ext4

/data/media on /storage/emulated type sdcardfs

tmpfs on /storage type tmpfs

附录

//-- /storage/emulated/0/Android/data/com.xxx.xxx/files/

//-- /storage/0000-006F/Android/data

File[] str5 = getExternalFilesDirs("");

//-- /storage/emulated/0

String str6 = Environment.getExternalStorageDirectory().getAbsolutePath();

//-- /storage/emulated/0

String str7 = Environment.getExternalStoragePublicDirectory("").getAbsolutePath();

//-- /storage/emulated/0/Android/data/com.xxx.xxx/files

//-- 应用特定目录的外部存储中,当用户卸载您的应用时,系统会删除该目录

String str4 = getExternalFilesDir("").getAbsolutePath();

3. 真实外部存储路径

指的是 /storage/0000-006F等

插入外置SD卡后 mount 信息如下:

/dev/block/dm-0 on /data type ext4

/data/media on /storage/emulated type sdcardfs

/mnt/media_rw/0000-006F on /storage/0000-006F type sdcardfs

tmpfs on /storage type tmpfs

附录

//-- /storage/emulated/0/Android/data/com.xxx.xxx/files/

//-- /storage/0000-006F/Android/data

File[] str5 = getExternalFilesDirs("");

4. MediaProvider的internal.db与external.db

MediaProvider internal.db对应的是 /system/media中数据信息

MediaProvider external.db对应的是 /sdcard中数据信息

同样是上班“摸鱼”被开除,为何一个开除合法,一个开除违法? 鼠标的寿命与保养技巧:如何延长你的鼠标使用时间