Aru*_*abu 5 android android-intent android-8.0-oreo
如何检查设备在 Android 8 Oreo 上的存储空间是否不足。我在 Android 文档中看到API 26 中不推荐使用Intent.ACTION_DEVICE_STORAGE_LOW。
此常量在 API 级别 26 中已弃用。 如果您的应用以 O 或更高版本为目标,则此广播将不再传送到清单中定义的任何 BroadcastReceiver。相反,强烈建议应用程序使用改进的 getCacheDir() 行为,以便系统可以在需要时自动释放存储空间。 - 安卓文档
他们鼓励我改用 getCacheDir()。
但是我对它的了解不多,因为 getCacheDir() 似乎将系统缓存目录路径作为 FILE 对象返回,该对象只能用于清除缓存等。
但我需要检查设备的设备存储空间是否不足。我希望有人能帮助我
Eri*_*rik 10
正如问题中正确所述,API 26Intent.ACTION_DEVICE_STORAGE_LOW已被弃用,Context#getCacheDir()建议改为使用API 26来从应用程序的缓存中释放空间。
这有多个问题(下面列举),但首先:请注意,保持缓存“合理小”(例如 1 MB)是一个好习惯,我引用:
getCacheDir()返回一个 File 表示应用程序的临时缓存文件的内部目录。确保在不再需要每个文件时将其删除,并对您在任何给定时间使用的内存量实施合理的大小限制,例如 1MB。
注意:如果系统存储空间不足,它可能会在没有警告的情况下删除您的缓存文件。
所以,这里存在三个问题:
Intent.ACTION_DEVICE_STORAGE_OK以前可用于此的已弃用)所以,清除缓存似乎没有帮助,所以我不会详细介绍如何做到这一点。
但是,根据这个答案,我们可以假设系统在 10% 的可用存储空间进入我们想要检测的低存储状态。根据链接的答案,此数字是 Android 的默认值,但几乎无法阻止设备制造商(或 ROM 开发人员)更改它。
在这一点上,对我来说,这 10% 是一个神奇的数字,我想知道我是否可以通过编程来确定这个阈值。如果您知道如何,请编辑我的答案,自己发布答案或评论我的答案。
为此getCacheDir(),您可以使用以下命令:
Java,来自Context(例如Activity):
File cacheDir = getCacheDir();
if (cacheDir.getUsableSpace() * 100 / cacheDir.getTotalSpace() <= 10) { // Alternatively, use cacheDir.getFreeSpace()
// Handle storage low state
} else {
// Handle storage ok state
}
Run Code Online (Sandbox Code Playgroud)
Kotlin,来自Context(例如Activity):
if (cacheDir.usableSpace * 100 / cacheDir.totalSpace <= 10) { // Alternatively, use cacheDir.freeSpace
// Handle storage low state
} else {
// Handle storage ok state
}
Run Code Online (Sandbox Code Playgroud)
现在,是使用可用空间还是可用空间,这对我来说并不完全清楚。此处描述了不同之处。
深入到 Android 源代码中,我发现了一个系统服务,我无法在我的代码中访问它,它检查低存储空间:DeviceStorageMonitorService. 它lowBytes从获取它的变量StorageManager#getStorageLowBytes,我也无法访问。如果这可以以某种非hacky 的方式实现,那将是一种获得低存储字节阈值的方法。在那里你会看到源代码使用getUsableSpace(),所以这就是为什么我选择它而不是getFreeSpace()我的代码片段。
| 归档时间: |
|
| 查看次数: |
3983 次 |
| 最近记录: |