Android 获取棉花糖中的内部和外部内存大小

Android 获取棉花糖中的内部和外部内存大小,android,android-studio,memory-management,android-6.0-marshmallow,Android,Android Studio,Memory Management,Android 6.0 Marshmallow,我试图在我的应用程序中显示内部和外部(SD卡)内存的大小。我的代码在kitkat及以下api版本中运行良好,但我的应用程序在棉花糖或棒棒糖中崩溃。这是我的代码 public static long getAvailableInternalMemorySize() { File path = Environment.getDataDirectory(); StatFs stat = new StatFs(path.getPath()); lon

我试图在我的应用程序中显示内部和外部(SD卡)内存的大小。我的代码在kitkat及以下api版本中运行良好,但我的应用程序在棉花糖或棒棒糖中崩溃。这是我的代码

 public static long getAvailableInternalMemorySize() 

{
        File path = Environment.getDataDirectory();
        StatFs stat = new StatFs(path.getPath());
        long blockSize = stat.getBlockSize();
        long availableBlocks = stat.getAvailableBlocks();
        return availableBlocks * blockSize;
    }

    public static long getTotalInternalMemorySize() {
        File path = Environment.getDataDirectory();
        StatFs stat = new StatFs(path.getPath());
        long blockSize = stat.getBlockSize();
        long totalBlocks = stat.getBlockCount();
        return totalBlocks * blockSize;
    }

    public static long getAvailableExternalMemorySize() {


        String secStore = System.getenv("SECONDARY_STORAGE");
        File path = new File(secStore);
        StatFs stat = new StatFs(path.getPath());

        long blockSize = stat.getBlockSize();

        long availableBlocks = stat.getAvailableBlocks();

        long total = availableBlocks * blockSize;

        return total;
    }


    public static long getTotalExternalMemorySize() {

        String secStore = System.getenv("SECONDARY_STORAGE");
        File path = new File(secStore);
        StatFs stat = new StatFs(path.getPath());

        long blockSize = stat.getBlockSize();

        long availableBlocks = stat.getBlockCount();

        long total = availableBlocks * blockSize;


        return total;

    }

您能告诉我在上述api版本中获取内存大小的解决方案吗?

在lolipop或marshmallo中,您必须使用
Environment.getExternalStorageDirectory().getAbsolutePath()

获取外部存储路径,而不是System.getenv(“辅助存储”)

有关在>android 5.0中获取外部和内部存储的详细信息,请参阅beolw代码

public static String getTotalInternalMemorySize() {
            File path = Environment.getDataDirectory();
            StatFs stat = new StatFs(path.getPath());
            long blockSize = stat.getBlockSize();
            long totalBlocks = stat.getBlockCount();
            return formatSize(totalBlocks * blockSize);
        }

        public static String getAvailableExternalMemorySize() {
                File path = Environment.getExternalStorageDirectory();
                StatFs stat = new StatFs(path.getPath());
                long blockSize = stat.getBlockSize();
                long availableBlocks = stat.getAvailableBlocks();
                return formatSize(availableBlocks * blockSize);
            }   

你的应用程序崩溃是因为
System.getenv(“辅助存储”)
可以返回
null
。你没有对此负责。因此出现了NullPointerException。你为什么不报告这个异常?但是它没有给你SD卡的大小。那你为什么放弃这个功能呢?