微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在低于 26 的 Android API 上使用 StorageManager 获取目录的 uuid?

如何解决如何在低于 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!!.getUuidForPathstorageManager.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 举报,一经查实,本站将立刻删除。