直接贴出代码,有需要的可以直接变成工具类使用。优先读取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;
}
原文地址:https://blog.csdn.net/a1436237789/article/details/130618547
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_48356.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。