【问题标题】:Get Android device storage capacity获取安卓设备存储容量
【发布时间】:2018-10-30 05:30:03
【问题描述】:

我想获得设置 -> 存储中显示的设备存储容量 - 通常类似于:32 / 64 / 128 / 256 GB。

我使用了这篇文章(以及一些类似的文章): It is possible to get total storage capacity?

我有这个代码:

    StatFs stat = new StatFs(Environment.getDataDirectory().getAbsolutePath());
    long gb = 1024 * 1024 * 1024;
    long size = stat.getTotalBytes() / gb;

这在 64GB 三星 S8 上返回 47GB,在 128GB 华为 Mate 10 上返回 111GB - 这不是我想要的。

如何获得 64GB / 128GB 的​​值? 谢谢!!

更新

这与这个问题相同:How to get exact capacity from storage。 不幸的是,接受的答案表明无法获取存储信息-我希望得到不同的答案..可能不使用 StatFs 而是其他方式。

【问题讨论】:

  • 总空间通常被分成多个分区(参见例如forum.xda-developers.com/general/general/…)。因此,文件系统中并非所有内容都可用。
  • 谢谢亨利 - 是否可以不使用 StatFs 而使用其他方式?
  • @Daniel 你检查过 CommonsWare 的答案吗(他是 Android 大师)我上面提到的重复问题。它明确指出,任何 API 都无法获取手机的存储容量(可能对于 root 设备)。检查它:stackoverflow.com/a/43005006/631803
  • @VicJordan 是的 .. 我看到了,谢谢 .. 我会再试几天再放弃

标签: android


【解决方案1】:

您可以尝试使用这样的东西(在 API 级别 26 中添加):

  1. 使用StorageManager#getStorageVolumes()https://developer.android.com/reference/android/os/storage/StorageManager#getStorageVolumes()获取所有存储卷的UUID

  2. 通过StorageStatsManager#getTotalBytes(java.util.UUID)https://developer.android.com/reference/android/app/usage/StorageStatsManager#getTotalBytes(java.util.UUID)你可以找到每个存储的总字节数

  3. 总结您需要的所有存储的大小。

【讨论】:

  • 谢谢伊戈尔 - 我试过这种方式 - 我从 storageVolume.getUuid() 得到 null .. 这也只适用于非常新的设备(Android 8+)
  • @Daniel 当它为空时,表示它是主要的,所以你需要使用StorageManager.UUID_DEFAULT 来代替。此外,我认为您获得的总和只是用户可以使用的存储空间(意味着没有系统的东西)。
【解决方案2】:

您可以使用下面的 sn-p 来获取总内存。

File path=Environment.getDataDirectory();
StatFs stat=new StatFs(path.getPath());
long blockSize=stat.getBlockSize();
long availableBlocks=stat.getBlockCount();
long totalInternalMemory=availableBlocks*blockSize;

【讨论】:

  • 谢谢乔伊,这与我的代码中的 stat.getTotalBytes() 返回相同......但不幸的是它不是总存储空间
  • 不是容量!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多