Android 获取内外置存储路径
来源:互联网 发布:centos 防止暴力破解 编辑:程序博客网 时间:2024/04/29 03:48
现在的Android手机的ROM都比较大,所以会分割出去一部分空间作为内部存储,但是由于空间大小已经超过了32G了,所以在 存储路径上命名不是简单的 sdcard和sdcard1
查找了一些资料,利用反射的方法去获取内外置储存空间的实际路径,代码如下:
@NonNull public static List<String> getStorageDirectory(Context context) { List<String> list = new ArrayList<>(); try { StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE); Method getVolumePathsMethod = StorageManager.class.getDeclaredMethod("getVolumePaths"); getVolumePathsMethod.setAccessible(true); String[] paths = (String[]) getVolumePathsMethod.invoke(storageManager); if (paths != null && paths.length > 0) { Collections.addAll(list, paths); } else { Log.w(TAG, "getStorageDirectory: not found"); } } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return list; }
以上为获取存储路径的代码,如果插有SD卡,也能获取到SD卡挂载的路径,另外附上计算存储空间大小的代码:
private static final int K = 1024; private static final int M = 1024 * 1024; private static final int G = 1024 * 1024 * 1024; public String getStorageInformation(Context context) { StringBuilder builder = new StringBuilder(); List<String> list = StorageUtils.getStorageDirectory(context); if (!list.isEmpty()) { for (String s : list) { builder.append("StorageDirectory:").append(s).append("\n"); StatFs statFs = new StatFs(s); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { builder.append("Available:").append(getSize(statFs.getBlockSizeLong() * statFs.getAvailableBlocksLong())).append("\n"); builder.append("Total:").append(getSize(statFs.getBlockSizeLong() * statFs.getBlockCountLong())).append("\n"); } else { builder.append("Available:").append(getSize(statFs.getBlockSize() * statFs.getAvailableBlocks())).append("\n"); builder.append("Total:").append(getSize(statFs.getBlockSize() * statFs.getBlockCount())).append("\n"); } } builder.append("DefaultDirectory:").append(Environment.getExternalStorageDirectory().getAbsolutePath()); } return builder.toString(); } private String getSize(long bytes) { if (bytes < K) { return String.format(Locale.CHINA, "%.2f B", bytes * 1.0f); } else if (bytes < M) { return String.format(Locale.CHINA, "%.2f KB", bytes * 1.0f / K); } else if (bytes < G) { return String.format(Locale.CHINA, "%.2f MB", bytes * 1.0f / M); } else { return String.format(Locale.CHINA, "%.2f GB", bytes * 1.0f / G); } }
0 0
- Android 获取内外置存储路径
- Android获得内/外置存储卡路径
- Android 获取内外置存储卡方法
- Android 获取内外置存储卡方法
- Android 获取内外置存储卡方法
- Android 获取内外置存储卡方法
- Android 获取内外置存储卡方法
- Android获取外置存储卡、内置存储卡路径
- android两行代码获取内外置sd卡路径
- 获取android系统外置存储卡路径的方法
- Android获取系统外置存储卡路径的方法
- Android获取系统外置存储卡路径的方法
- Android获取系统外置存储卡路径的方法
- Android 准确获取外置存储卡路径的方法
- Android 获取外置SDcard路径
- 获取内置和外置存储路径
- Android获取不同手机 自身存储和外置SD卡存储路径的解决方案
- Android 获取外置USB的路径
- 浅谈图片服务器的架构演进
- 以POST方式下载文件
- Python_共轭梯度法与最速下降法之间的比较
- css3元素周期表
- tinyhttpd 学习笔记
- Android 获取内外置存储路径
- 影响因子(Impact Factor,IF)
- xml解析器
- RMQ算法
- css3-border-radius-机器猫
- android真机访问本地服务器
- 关于VO、DTO、DO、PO的概念、区别和用处
- Linux命令之"which"
- Servlet-request之与请求头相关的方法