Android內部存儲和外部存儲的幾個概念(內部存儲空間和外部存儲空間、SD卡、storage/emulated、MediaProvider的internal.db與external.db)

所有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中數據信息
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章