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

标签 android storage uuid android-8.0-oreo

我整天都在为一些琐碎的事情而奋斗,但现在我只是放弃了,需要你的帮助。

在用于读取应用程序代码/数据/缓存/大小的新 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 个存储空间:

  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是什么让我更加沮丧......

最佳答案

实际上 fromString(uuid_string) 需要一个“长”UUID(有 4 或 8 个部分记不清了)。

但是下面的工作完美:

UUID.nameUUIDFromBytes(sv.getUuid().getBytes());

关于android - 从 Android StorageManager 获得的存储 UUID 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48589109/

相关文章:

android - Kotlin 序列化中的泛型产生编译时错误

android - android studio 3.3 中缺少数字选择器和许多其他调色板?

android studio1.0.2 本地路径不存在

java - 在文件中有效地存储易于解析的数据?

iphone - 如何通过在iphone中编程找到UUID?

android - 一项 Activity 与另一项 Activity 之间的延迟

c - float 或 double 值如何存储在 C 中的变量中?

php - 使用 PHP 序列化 XML 数据以存储在 MySQL 中

ruby-on-rails - 随机化数据库记录 ID

ios - 核心蓝牙 : what is the Service UUID FFE0 shorten for?