相关疑难解决方法(0)

如何获得每个StorageVolume的免费和总大小?

背景

Google不幸地计划破坏存储权限,以使应用程序无法使用标准File API(和文件路径)访问文件系统。许多人反对它,因为它改变了应用程序访问存储的方式,并且在许多方面都是受限制的有限API。

因此,如果我们想处理各种问题,我们将需要在将来的某些Android版本上完全使用SAF(存储访问框架)(在Android Q上,我们至少可以暂时使用一个标志来使用常规存储权限)。存储卷并到达那里的所有文件。

因此,例如,假设您要制作一个文件管理器并显示设备的所有存储卷,并为每个文件显示有多少总字节和可用字节。这样的事情看起来非常合法,但是由于我找不到找到这种方法的方法。

问题

从API 24(此处)开始,我们终于可以列出所有存储卷,如下所示:

    val storageManager = getSystemService(Context.STORAGE_SERVICE) as StorageManager
    val storageVolumes = storageManager.storageVolumes
Run Code Online (Sandbox Code Playgroud)

事实是,此列表上的每个项目都没有功能来获取其大小和可用空间。

但是,以某种方式,Google的 Google提供的文件”应用程序设法获得了该信息,而没有获得任何形式的许可:

在此处输入图片说明

并在装有Android 8的Galaxy Note 8上进行了测试。甚至没有最新版本的Android。

因此,这意味着即使在Android 8上,也应该有一种无需任何许可即可获取此信息的方法。

我发现了什么

有一些类似于获得自由空间的东西,但是我不确定是否确实如此。虽然如此。这是它的代码:

    val storageManager = getSystemService(Context.STORAGE_SERVICE) as StorageManager
    val storageVolumes = storageManager.storageVolumes
    AsyncTask.execute {
        for (storageVolume in storageVolumes) {
            val uuid: UUID = storageVolume.uuid?.let { UUID.fromString(it) } ?: StorageManager.UUID_DEFAULT
            val allocatableBytes = storageManager.getAllocatableBytes(uuid)
            Log.d("AppLog", "allocatableBytes:${android.text.format.Formatter.formatShortFileSize(this,allocatableBytes)}")
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,我找不到类似的东西来获取每个StorageVolume实例的总空间。假设我对此是正确的,我已经在这里提出了要求。

您可以在我对此问题写的答案中找到更多我所找到的内容,但是目前,这是所有变通办法的结合,这些工作不是变通办法,而是在某些情况下有效。 …

android storage-access-framework

17
推荐指数
3
解决办法
587
查看次数

如何在Android O上使用StorageStatsManager.queryStatsForPackage?

背景

在使用Android O之前,为了获得应用程序的大小,您必须具有特殊的权限,并使用隐藏的API。

问题

这样的解决方案不再起作用,但是Google提供了一个不太细粒度的官方API:queryStatsForPackage,它返回StorageStats对象。

但是,我找不到有关如何使用它的任何信息。

与仅需要应用程序包名称的隐藏API相比,该API还需要“ String volumeUuid”和“ UserHandle user”。

问题

  1. 如何提供这些参数?
  2. 他们的意思是什么?每个volumeUuid是否都引用不同的存储(例如,内置存储和真实的SD卡),而UserHandle是针对每个用户的吗?
  3. 如果#2是正确的,我是否应该为每个可能的值分别调用它们,以获取应用程序占用的实际总存储量?如果是这样,怎么办?

storage android android-8.0-oreo

2
推荐指数
1
解决办法
2418
查看次数