【问题标题】:Get Internal and External Memory size in MarshMallow在 MarshMallow 中获取内部和外部内存大小
【发布时间】:2016-10-26 09:49:57
【问题描述】:

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

 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 版本中获取内存大小的解决方案吗...?

【问题讨论】:

  • 您的应用程序崩溃,因为System.getenv("SECONDARY_STORAGE"); 可以返回null。你没有考虑到这一点。因此出现 NullPointerException。您为什么不报告此异常?

标签: android android-studio memory-management android-6.0-marshmallow


【解决方案1】:

在棒棒糖或棉花糖中,您必须使用
Environment.getExternalStorageDirectory().getAbsolutePath();

获取外部存储路径而不是System.getenv("SECONDARY_STORAGE");

在>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);
            }   

【讨论】:

  • 但它并没有给你 SD 卡的大小。那么你为什么放弃这个功能呢?
猜你喜欢
  • 2011-12-29
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多