我整天都在为一些琐碎的事情而奋斗,但现在我只是放弃了,需要你的帮助。
在用于读取应用程序代码/数据/缓存/大小的新 Oreo API 中,我们需要存储 UUID ( StorageStatsManager.queryStatsForUid(UUID storageUuid, int uid))。
可以从 StorageManager.getStorageVolumes() 中获取存储 UUID它返回所有存储的列表,其中也包含 UUID。
问题开始了:返回列表中的 UUID 是字符串格式,而 StorageStatsManager.queryStatsForUid(UUID storageUuid, int uid)需要 UUID 对象 - 没有什么更简单 - 存在方法 UUID.fromString(String name)它会在一段时间内转换它......但是等等,StorageManager 列表中的 UUID 值与 UUID 解析器不兼容 - 什么?! 我已经检查了 2 台设备(一台使用 Oreo,一台使用 Nougat),对于外部存储器和每个设备,我都有 2 个存储空间:
- UUID 为“null”的内部设备内存 - 没关系,因为这在文档中有描述
- UUID 值格式如“4012-1A4B”的外部卡存储是无效的 UUID 格式并导致 UUID.fromString 抛出 IllegalArgumentException。
谁能解释我做错了什么以及我应该如何获取外部存储的 UUID?或者只是新 API StorageStatsManager.queryStatsForUid(UUID storageUuid, int uid)是没用的,因为我们无法获得存储 UUID?
仅供引用:
此外还有另一个 StackOverflow 问题,其中使用此 API 被标记为正确的解决方案:https://stackoverflow.com/a/44708209/1946366是什么让我更加沮丧......
最佳答案
实际上 fromString(uuid_string) 需要一个“长”UUID(有 4 或 8 个部分记不清了)。
但是下面的工作完美:
UUID.nameUUIDFromBytes(sv.getUuid().getBytes());
关于android - 从 Android StorageManager 获得的存储 UUID 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48589109/