如何在 26 以下的 Android API 上使用 StorageManager 获取目录的 uuid?
Posted
技术标签:
【中文标题】如何在 26 以下的 Android API 上使用 StorageManager 获取目录的 uuid?【英文标题】:How to get directory's uuid using StorageManager on Android API below 26? 【发布时间】:2021-06-25 18:49:25 【问题描述】:我创建了一个辅助函数来检查任何给定目录的剩余空间。
@RequiresApi(Build.VERSION_CODES.O)
fun Context.hasFreeSpace(directory: File, requiredStorageSpace: Long): Boolean
return try
val storageManager = getSystemService<StorageManager>()
val directoryUUID = storageManager!!.getUuidForPath(directory)
val availableBytes = storageManager.getAllocatableBytes(directoryUUID)
availableBytes > requiredStorageSpace
catch (e: Exception)
e.printStackTrace()
false
实际点击此链接。 https://developer.android.com/training/data-storage/app-specific#query-free-space
问题是我得到 storageManager!!.getUuidForPath
和 storageManager.getAllocatableBytes
都需要 API >= 26。
我在谷歌上搜索过,但没有找到关于如何在 API
有人知道如何实现吗?
谢谢
【问题讨论】:
【参考方案1】:好吧,我想我需要一种不同的方法。正如我在谷歌上搜索的那样,在 Android O 发布时添加了所需的 UUID。所以基本上,没有这样的东西会在 O 之前获得目录 UUID 退出。现在这是我的辅助函数。
@SuppressLint("NewApi")
fun Context.hasFreeSpace(directory: File, requiredStorageSpace: Long): Boolean
return try
val api = Build.VERSION.SDK_INT
val availableBytes = when
api >= Build.VERSION_CODES.O ->
val storageManager = getSystemService<StorageManager>()
val directoryUUID = storageManager!!.getUuidForPath(directory)
storageManager.getAllocatableBytes(directoryUUID)
else ->
val stat = StatFs(directory.path)
stat.availableBlocksLong * stat.blockSizeLong
availableBytes > requiredStorageSpace
catch (e: Exception)
e.printStackTrace()
false
【讨论】:
以上是关于如何在 26 以下的 Android API 上使用 StorageManager 获取目录的 uuid?的主要内容,如果未能解决你的问题,请参考以下文章
JobIntentService 不适用于 Oreo 以下的 API (API <= 26)
错误:仅从 Android O (--min-api 26) 开始支持调用自定义