Android 獲取外置SD卡


真機環境下如何獲取內部存儲路徑和外置SD卡路徑。

打開文件管理器可以看到兩個目錄,分別是內部存儲  /storage/emulated/0  和外置SD卡路徑   /storage/9EBB-17EE 

 

其中內部存儲根路徑,可直接通過  Environment.getExternalStorageDirectory() 獲取。

 

外置SD卡路徑 需要通過反射獲取,代碼如下

/** * 通過反射調用獲取內置存儲和外置sd卡根路徑(通用) * * @param mContext 上下文 * @param is_removale 是否可移除,false返回內部存儲路徑,true返回外置SD卡路徑 * @return
     */
 private static String getStoragePath(Context mContext, boolean is_removale) { String path = ""; //使用getSystemService(String)檢索一個StorageManager用於訪問系統存儲功能。 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); for (int i = 0; i < Array.getLength(result); i++) { Object storageVolumeElement = Array.get(result, i); path = (String) getPath.invoke(storageVolumeElement); boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement); if (is_removale == removable) { return path; } } } catch (Exception e) { e.printStackTrace(); } return path; }

 

效果如下

 

Demo 地址:https://github.com/wgitgame/SDDemo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM