1. 程式人生 > >android sdcard各種儲存路徑解惑

android sdcard各種儲存路徑解惑

在開發app的過程中,需要儲存一些資料,這時就會遇到各種儲存路徑,sdcard/、storage/sdcard0、mnt/sdcard等等,會讓人很難以理解。這其中的很多路徑都是指向同一個路徑,有點指標的味道。


其中的sdcard/、mnt/sdcard、storage/sdcard0、storage/emulated/0、storage/emulated/legacy都是同一個路徑的不同”指標“,說到底都是內部儲存,真正的外部儲存卡是mnt/sdcard2和storage/sdcard1,通過Environment.getExternalStorageDirectory函式獲取的還是內部儲存卡。

檢視官方文件和測試發現,在api 19和以上版本呼叫getExternalFilesDirs時會同時能夠獲取到內部和外部sdcard,內部是獲取到的storage/emulated/0的儲存路徑,外部獲取的是storage/sdcard1的儲存路徑,通過用相容包中的ContextCompat.getExternalFilesDirs函式也能達到相同的效果。相比之下,getExternalFilesDir 這個只是得到主外部儲存目錄,預設是內部儲存中的storage/emulate/0。官方文件中說6.0以後採取了adoptable storage,可以將應用安裝在外部儲存空間了,只需要將外部儲存空間設定成主外部儲存目錄。

Android官方文件說明(需翻牆)

其中的mnt目錄是Linux本身就帶有的,Android還應用了fuse技術。再往下挖掘就到了Linux內部的filesystem了。