从 Android StorageManager 获得的存储 UUID 无效?

pee*_*mes 9 uuid storage android android-8.0-oreo

我因为一些琐碎的事情而失去了整整一天,但现在我只是放弃并需要你的帮助。

在用于读取应用程序代码/数据/缓存/大小的新 Oreo API 中,我们需要存储 UUID(StorageStatsManager.queryStatsForUid(UUID storageUuid, int uid))。

存储 UUID 可以从StorageManager.getStorageVolumes()获取,它返回所有存储的列表,其中也包含 UUID。

问题开始了:返回列表中的 UUID 是字符串格式,而StorageStatsManager.queryStatsForUid(UUID storageUuid, int uid)需要 UUID 对象 - 没有更简单的 - 存在方法UUID.fromString(String name)可以在一段时间内转换它。 . 但是等等,StorageManager 列表中的 UUID 值与 UUID 解析器不兼容 -什么?!我检查了 2 台设备(一台带奥利奥,一台带牛轧糖),都有外部存储器,每台设备我都有 2 个存储:

  1. UUID 的内部设备内存等于“null” - 这很好,因为文档中对此进行了描述
  2. 具有 UUID 值的外部卡存储,格式为“4012-1A4B”,什么是无效的 UUID 格式并导致 UUID.fromString 抛出 IllegalArgumentException。

谁能解释一下我做错了什么,我应该如何获取外部存储的 UUID?或者只是新的 API StorageStatsManager.queryStatsForUid(UUID storageUuid, int uid)没用,因为我们无法获得存储 UUID?


供参考:

更重要的是还有另一个 StackOverflow 问题,其中将此 API 的使用标记为正确的解决方案:https : //stackoverflow.com/a/44708209/1946366是什么让我更加沮丧...

3c7*_*c71 7

实际上,fromString(uuid_string) 采用一个“长”UUID(大约有 4 或 8 个部分,记不清了)。

然而,以下效果完美:

UUID.nameUUIDFromBytes(sv.getUuid().getBytes());
Run Code Online (Sandbox Code Playgroud)


pee*_*mes 2

我发现这已经在 Android 上引发了错误: https: //issuetracker.google.com/issues/62982912 所以我认为我的问题是无法回答的。