如何區分手機內置存儲卡與外置存儲卡

android系統自從升級到2.3之後,多一個功能,能夠判斷存儲卡是不是能夠卸載的。Environment.isExternalStorageRemovable(),經過此方法咱們能夠知道手機上的存儲卡是手機自帶的仍是外邊可插拔的SD卡,固然此種狀況是指只有一個卡的狀況。
可是如今國內的大多數手機都支持雙存儲卡:
一、即手機內置的有2G、4G或8G的內部存儲卡,默認安裝的應用與數據都會到這個卡中,用戶不買可插拔的SD卡,也可以使用。
二、手機的存儲空間畢竟有限,因此手機也支持外置的SD卡,或者叫TF卡、擴展卡等。
那麼這時候問題就來了,在程序中咱們如何能夠判斷哪一個路徑對應的是內置存儲卡,哪一個對應的是外置存儲卡。有人說用Environment.getExternalStorageDirectory()方法獲得不就是SD卡嗎,這種方法明顯不適用的,尤爲在4.0之後。
偏偏相反,使用上面的方法獲得的大多數是手機內部對應的SD卡(/mnt/sdcard 4.1系統如下,4.1直接變爲/storage/sdcard0),下面我總結了一些較常見的外部SD卡的路徑:
/mnt/sdcard2                 /mnt/sdcard-ext     /mnt/ext_sdcard    /mnt/sdcard/SD_CARD
/mnt/sdcard/extra_sd   /mnt/extrasd_bind   /mnt/sdcard/ext_sd
/mnt/sdcard/external_SD    /storage/sdcard1   /storage/extSdCard 
如何直接取,而不是hardcode來定死呢,用這個方法getVolumePaths,經過反射機制獲得路徑,而後判斷便可。


android

一些路徑的標準寫法web

Environment.getDataDirectory() = /data
Environment.getDownloadCacheDirectory() = /cache
Environment.getExternalStorageDirectory() = /mnt/sdcard
Environment.getRootDirectory() = /system
context.getCacheDir() = /data/data/com.mt.mtpp/cache
context.getExternalCacheDir() = /mnt/sdcard/Android/data/com.mt.mtpp/cache
context.getFilesDir() = /data/data/com.mt.mtpp/files
spa

相關文章
相關標籤/搜索