赞
踩
直接贴出代码,有需要的可以直接变成工具类使用。优先读取sd卡假设没有sd卡再去手机内存中获取。记得动态配置读写权限!
- /**
- * 优先在SD卡,其次是内部存储
- */
- public static String getRWPath(Context context) {
-
- String rwPath = null;
- String storagePath = getStoragePath(context, true);
- if (null != storagePath) {
- rwPath = storagePath;
- } else {
- String sdPath = getSDPath();
- rwPath = sdPath;
- }
- return rwPath;
- }
- /**
- * @description 获取SD卡路径,不用在设置中这是默认存储位置
- */
- public 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 | InvocationTargetException | NoSuchMethodException | IllegalAccessException e) {
- e.printStackTrace();
- }
- return null;
- }

- /**
- * 获取SD卡路径
- *
- * @return
- */
- public static String getSDPath() {
- String sdPath = null;
- // 判断sd卡是否存在
- boolean sdCardExit = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
- if (sdCardExit) {
- // 获取根目录
- sdPath = Environment.getExternalStorageDirectory().toString();
- }
- return sdPath;
-
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。