Android 通過反射調(diào)用獲取內(nèi)置存儲和外置sd卡根路徑(適用于各個版本)

最近做項目有獲取手機存儲和內(nèi)存的需求,查了各種方法都不太如人意,手機存儲倒是能正常獲取,但是獲取SD卡的時候卻總是有路徑、權(quán)限等各種各樣的問題。后來多方查詢終于找到了一篇博客,用了一下還挺滿足需求的。放上鏈接:

https://blog.csdn.net/bit_kaki/article/details/69950910

以下是原文方法:
核心是先獲取內(nèi)存管理器,然后用invoke獲取所有路徑,再根據(jù)是否可移除(SD卡可移除,內(nèi)存不行)獲取到不同的路徑。具體方法如下:

    /**
    * 通過反射調(diào)用獲取內(nèi)置存儲和外置sd卡根路徑(通用)
    *
    * @param mContext    上下文
     * @param is_removale 是否可移除,false返回內(nèi)部存儲,true返回
    外置sd卡
    * @return
     */
 private static String getStoragePath(Context mContext, boolean 
 is_removale) {

 StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);
 Class<?> storageVolumeClazz = null;
try {
    storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");
    Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");
    Method getPath = storageVolumeClazz.getMethod("getPath");
    Method isRemovable = storageVolumeClazz.getMethod("isRemovable");
    Object result = getVolumeList.invoke(mStorageManager);
    final int length = Array.getLength(result);
    for (int i = 0; i < length; i++) {
        Object storageVolumeElement = Array.get(result, i);
        String path = (String) getPath.invoke(storageVolumeElement);
        boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement);
        if (is_removale == removable) {
            return path;
        }
    }
} catch (ClassNotFoundException e) {
    e.printStackTrace();
} catch (InvocationTargetException e) {
    e.printStackTrace();
} catch (NoSuchMethodException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
}
return null;
 }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 30,214評論 8 265
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,626評論 1 32
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,881評論 25 709
  • 夜 已深了 一張床 一個人 一個手機 手機屏幕還在不停閃爍 他的手在屏幕上不停的劃動著 一會急促 一會緩慢 劃到某...
    執(zhí)筆問情閱讀 272評論 0 1
  • ——《老街的童話》書評 童話故事是很多人都喜歡的題材,可謂經(jīng)久不衰,不只吸引著孩子,更吸引著成年人,其中包含的神奇...
    山千黛閱讀 708評論 1 2

友情鏈接更多精彩內(nèi)容