Android 获取棉花糖中的内部和外部内存大小
我试图在我的应用程序中显示内部和外部(SD卡)内存的大小。我的代码在kitkat及以下api版本中运行良好,但我的应用程序在棉花糖或棒棒糖中崩溃。这是我的代码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
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卡的大小。那你为什么放弃这个功能呢?