Несколько концепций внутреннего и внешнего хранилища Android (внутреннее и внешнее хранилище, SD-карта, хранилище/эмулируемое хранилище, Internal.db и external.db MediaProvider)

Все устройства 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. Internal.db и external.db MediaProvider.
      MediaProvider internal.db对应的是 /system/media中数据信息
      MediaProvider external.db对应的是 /sdcard中数据信息

Guess you like

Origin blog.csdn.net/yfbdxz/article/details/103836026