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