【问题标题】:how to get the internal sdcard storage and External(removal) sdcard storage and system storage and available memory status in android?如何在android中获取内部sdcard存储和外部(删除)sdcard存储和系统存储以及可用内存状态?
【发布时间】:2014-07-12 10:49:23
【问题描述】:

我是 Android 新手。我需要获取内部存储和外部存储以及系统存储的简单代码,以及如何获取可用内存(内部和外部)空间、总内存空间的详细信息。我的代码在下面,但在“StatFs”方法中出现错误。提前致谢。

    long total, aval,total1, aval1,total2, aval2;
    int kb = 1024;

    StatFs fs = new StatFs(Environment.
                            getExternalStorageDirectory().getPath());

    total = fs.getBlockCount() * (fs.getBlockSize() / kb);
    aval = fs.getAvailableBlocks() * (fs.getBlockSize() / kb);
    //Here Iam Getting error StatFs method not loading
    StatFs fs1 = new StatFs(Environment.
    getRootDirectory()+"/storage/extSdCard/");


 total1 = fs1.getBlockCount() * (fs1.getBlockSize() / kb);
 aval1 = fs1.getAvailableBlocks() * (fs1.getBlockSize() / kb);

    pb1.setMax((int)total);
    pb1.setProgress((int)aval);
    pb2.setMax((int)total1);
    pb2.setProgress((int)aval1);

}

【问题讨论】:

  • 外部存储也不等同于可移动存储。

标签: android storage android-sdcard removable


【解决方案1】:

访问 SDCARD 服务时始终首先检查 SDCARD 当前是否已挂载。 你不能假设它是:

String state = Environment.getExternalStorageState();

if (state.equals(android.os.Environment.MEDIA_MOUNTED)) {
       // is mounted, can continue and check size

        StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
        long AvailableBytes = (long)stat.getBlockSize() *(long)stat.getBlockCount();
        long AvailableInMegas = AvailableBytes / 1048576; // <------------------
}


现在,获取可用的内部存储空间:

File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
long availableInternalInBytes = formatSize(availableBlocks * blockSize);

注意:以上内容将返回所有可用的存储空间,而不仅仅是您的应用程序!


获取内存使用情况:

final Runtime runtime = Runtime.getRuntime();
final long totalMem = runtime.totalMemory(); // <--------- total for YOUR JVM!
final long freeMem = runtime.freeMemory();  // <--------- free in YOUR JVM!
final long usedMem = totalMem - freeMem; // <--------- used in YOUR JVM!
final long maxMem = runtime.maxMemory()  // <--------- the max amount of mem that YOUR JVM may attempt to use

所有值都以字节为单位。


最后 - 询问外部存储器(不是 SDCARD):

您的代码假定上述路径是“/mnt/extSdCard/”。这不能保证。在某些设备中 它是“/mnt/external_sd/”。并且可以有其他名字..

您需要做的是首先列出所有已安装的存储设备,然后以某种方式(以编程方式、用户干预...)选择您的设备。方法如下:

File mountedRoot = new File("/mnt/");
if(mountedRoot.isDirectory()) {
    String[] allMountedFolders = storageDir.list();
    if (allMountedFolders != null) {
         for (String f: allMountedFolders) {
               // iterate over all mounted devices <-----------------------
         }
    }

}

【讨论】:

  • 感谢 Gilad Haimov 先生的回复。我在这个地方的问题 StatFs fs1 = new StatFs(Environment.getRootDirectory()+"/storage/extSdCard/"); StateFs 方法未打开此路径...
  • 更多然后不是 getExternalStorageDirectory 不会返回到 SD 卡的路径。但实际上是指外部存储器。在大多数设备/android 版本上,无法确定 micro SD 卡的路径。有时外部存储器和可移动存储器是相同的。
  • 糖果请看我编辑的帖子(看最后一部分)。希望有帮助
猜你喜欢
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 2012-03-27
相关资源
最近更新 更多