android系統(tǒng)提供了Environment.getExternalStorageDirectory()接口獲得存儲(chǔ)器的路徑,但是這個(gè)接口往往給的結(jié)果并不是我們想要的,在某些設(shè)備上它返回的是手機(jī)內(nèi)部存儲(chǔ),某些設(shè)備它返回的手機(jī)外部存儲(chǔ)。還有就是某些Android設(shè)備支持?jǐn)U展多個(gè)sdcard,這個(gè)時(shí)候想要獲得所有存儲(chǔ)器的掛載路徑,這個(gè)接口是沒(méi)有辦法辦到的。
目前創(chuàng)新互聯(lián)公司已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、平魯網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。怎么獲取Android設(shè)備所有存儲(chǔ)器的位置呢?或者說(shuō)獲得所有的掛載點(diǎn)
系統(tǒng)提供了一個(gè)StorageManager,它有一個(gè)方法叫g(shù)etVolumeList,這個(gè)方法的返回值是一個(gè)StorageVolume數(shù)組,StorageVolume類中封裝了掛載路徑,掛載狀態(tài),以及是否可以移除等等信息。但是很可惜,這個(gè)方法是隱藏的api,所以我們只能通過(guò)反射來(lái)調(diào)用這個(gè)方法了,下面是這個(gè)方法的源碼。
public StorageVolume[] getVolumeList() { if (mMountService == null) return new StorageVolume[0]; try { Parcelable[] list = mMountService.getVolumeList(); if (list == null) return new StorageVolume[0]; int length = list.length; StorageVolume[] result = new StorageVolume[length]; for (int i = 0; i < length; i++) { result[i] = (StorageVolume)list[i]; } return result; } catch (RemoteException e) { Log.e(TAG, "Failed to get volume list", e); return null; } }