CSDN-Ada助手 2023-05-31 21:16 采纳率: 2.9%
浏览 16

如何获取安卓总的存储使用情况,特别是系统占据的空间?_(语言-java)

该问题来自社区帖: https://bbs.csdn.net/topics/615642377.为符合问答规范, 该问题经过ChatGPT优化
如何获取安卓总的存储使用情况,特别是系统占据的空间? 以下代码可以获取到Android设备的内部存储路径和外部存储路径:
String path1 = Environment.getDataDirectory().getAbsolutePath();
Log.d(TAG, "path1: " + path1);
//输出结果为: /data
String path2 = Environment.getExternalStorageDirectory().getPath();
Log.d(TAG, "path2: " + path2);
//输出结果为: /storage/emulated/0
但是以上方法只能获得存储总量和剩余空间,无法直接获取系统占据的空间。 如果你想得到系统占据空间的具体数值,可以通过执行以下步骤进行自测: 步骤1:先获取出整个存储空间的总大小,和剩余空间的大小。
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long availableBlocks = stat.getAvailableBlocks();
步骤2:计算出系统空间占据的大小,具体求法为:总大小 - 剩余空间。
long totalSize = totalBlocks * blockSize;
long availSize = availableBlocks * blockSize;
//得出总空间bigger
long totalSize = bigger - availSize;
通过以上两个步骤,你就可以得出系统占据的空间大小了。因为不同设备的系统空间大小可能会有所不同,所以需要自行调试求解。
  • 写回答

2条回答 默认 最新

  • 于扶摇 2023-05-31 22:41
    关注

    获取整个存储空间的总大小和剩余空间的大小。您可以使用StatFs类来获取这些信息。
    计算出系统空间占据的大小。您可以使用总大小减去剩余空间大小来求得系统占据的空间大小。

    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-02 00:30
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自chatgpt:

      我建议您使用以下步骤获取Android系统占用存储的具体大小:

      1.使用adb shell命令查看 /system 分区的大小信息,以确定系统分区的总大小

      adb shell df /system

      输出格式:

      Filesystem              Size    Used     Free    Blksize
      /dev                   919M    428K     919M      4096
      /mnt/secure            919M      0K     919M      4096
      /mnt/asec              919M      0K     919M      4096
      /mnt/obb               919M      0K     919M      4096
      /system               1024M    898M     126M      4096
      /data                 3669M   2023M    1646M      4096
      /cache                 490M      6M     484M      4096
      /persist                24M     84K      24M      4096
      /efs                  128M      4M     123M      4096
      /firmware              128M      8M     120M      4096
      

      从上面的输出可以看出,/system 分区的总大小是1024M。

      2.使用adb shell命令查看 /system 分区中已使用的空间大小

      adb shell du -sh /system

      输出格式:

      898M    /system
      

      从上面的输出可以看出,/system 分区中已使用的空间大小是898M。

      3.使用系统StoreStatsManager的API获取系统分区占据的空间大小

      由于Android 11及更高版本修改了文件存储方案,因此StoreStatsManager将替换之前的API。因此,如果您的设备运行的是Android 11或更高版本,则可以使用StoreStatsManager获取系统分区的大小。

      以下是使用StoreStatsManager获取系统分区大小的示例代码:

      long usedBytes = StorageStatsManager.STORAGE_STATS_UNKNOWN;
      long totalBytes = StorageStatsManager.STORAGE_STATS_UNKNOWN;
      
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
          StorageStatsManager storageStatsManager =
                  (StorageStatsManager) context.getSystemService(Context.STORAGE_STATS_SERVICE);
      
          try {
              // 获取/system分区的UUID
              UUID systemUuid = storageStatsManager.getUuidForPath(Environment.getRootDirectory());
      
              //获取系统分区占用的空间大小
              StorageStats storageStats = storageStatsManager.queryStatsForUuid(systemUuid);
              usedBytes = storageStats.getAppBytes() + storageStats.getDataBytes()
                      + storageStats.getMediaBytes() + storageStats.getObbBytes();
              totalBytes = storageStats.getTotalBytes();
          } catch (Exception e) {
              Log.e(TAG, "Failed to get storage statistics", e);
          }
      }
      
      //将结果转换为单位为MB的大小
      float usedMb = (float) usedBytes / (1024 * 1024);
      float totalMb = (float) totalBytes / (1024 * 1024);
      
      Log.i(TAG, "Used space: " + usedMb + "MB");
      Log.i(TAG, "Total space: " + totalMb + "MB");
      

      注意:在Android 10及更低版本中运行时,以上代码将输出存储空间为“0MB”。因此,在这些旧版本中,建议使用第一种方法或第二种方法来获取系统分区的大小。

      希望这些步骤对您有所帮助!


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 5月31日

悬赏问题

  • ¥15 mysql游戏好友添加怎么设计啊?
  • ¥30 关于#开发语言#的问题:我需要在抄板的基础上再抄板抄程序,根据RDA8851CM基础上开发
  • ¥15 oracle 多个括号,怎么删除指定的括号及里面的内容?
  • ¥15 poly函数表达式的看法
  • ¥15 我想问一下有人熟悉思科packet tracer
  • ¥15 小新14API2019想用bios调风扇
  • ¥15 Python和易语言爬虫探讨
  • ¥15 有Sakai 会吗,没做过,需要交
  • ¥20 使用vba登录公司统一登录的网页
  • ¥15 opensea上传人机验证不了