如何解决如何在低于 26 的 Android API 上使用 StorageManager 获取目录的 uuid?
@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。
我在 google 周围搜索过,但关于如何在 API
有人知道如何实现这一目标吗?
谢谢
解决方法
好吧,我想我需要一种不同的方法。当我用谷歌搜索时,Android O 发布时添加了 UUID required。所以基本上,没有这样的事情让目录 UUID 在 O 之前退出。这是我现在的辅助函数。
@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
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。