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
原创粉丝点击