从 Android StorageManager 获得的无效存储 UUID?
Invalid UUID of storage gained from Android StorageManager?
为了一些琐碎的事情,我输了一整天,但现在我只能放弃,需要你的帮助。
在新奥利奥API阅读应用code/data/cache/大小我们需要存储UUID (StorageStatsManager.queryStatsForUid(UUID storageUuid,
int uid)).
可以从 StorageManager.getStorageVolumes() 中获取存储 UUID,其中 returns 所有存储列表也包含 UUID。
问题开始了:返回列表中的 UUID 是字符串格式,而 StorageStatsManager.queryStatsForUid(UUID storageUuid,
int uid) 需要 UUID 对象 - 没有更简单的 - 存在方法 UUID.fromString(String name) 可以在一段时间内转换它..但是等等,来自 StorageManager 列表的 UUID 值与 UUID 解析器不兼容 - 什么?! 我已经检查了 2 台设备(一台装有奥利奥,一台装有牛轧糖),都带有外部存储器,并且每台设备都有 2 个存储空间:
- 具有 UUID 的内部设备内存等于 "null" - 很好,因为这在文档中有描述
- UUID 值格式如“4012-1A4B”的外部卡存储是什么无效的 UUID 格式并导致UUID.fromString抛出 IllegalArgumentException。
任何人都可以解释我做错了什么以及我应该如何获取外部存储的 UUID?或者只是 new API StorageStatsManager.queryStatsForUid(UUID storageUuid,
int uid) 没用因为我们无法获取存储 UUID?
仅供参考:
此外,还有另一个 Whosebug 问题,其中 API 的用法被标记为正确的解决方案: 是什么让我更加沮丧...
我发现这已经在 Android 上引发了错误:
https://issuetracker.google.com/issues/62982912
所以我认为我的问题无法回答。
我认为每个包 的 应用程序信息 具有托管此应用程序的存储卷 UUID。
你可以通过 ,
ApplicationInfo ai = context.getPackageManager().getApplicationInfo(packagename, 0);
StorageStats storageStats = storageStatsManager.queryStatsForUid(ai.storageUuid, uid);
实际上 fromString(uuid_string) 需要一个 "long" UUID(大概有 4 或 8 个部分记不清了)。
但是下面的方法非常有效:
UUID.nameUUIDFromBytes(sv.getUuid().getBytes());
为了一些琐碎的事情,我输了一整天,但现在我只能放弃,需要你的帮助。
在新奥利奥API阅读应用code/data/cache/大小我们需要存储UUID (StorageStatsManager.queryStatsForUid(UUID storageUuid, int uid)).
可以从 StorageManager.getStorageVolumes() 中获取存储 UUID,其中 returns 所有存储列表也包含 UUID。
问题开始了:返回列表中的 UUID 是字符串格式,而 StorageStatsManager.queryStatsForUid(UUID storageUuid, int uid) 需要 UUID 对象 - 没有更简单的 - 存在方法 UUID.fromString(String name) 可以在一段时间内转换它..但是等等,来自 StorageManager 列表的 UUID 值与 UUID 解析器不兼容 - 什么?! 我已经检查了 2 台设备(一台装有奥利奥,一台装有牛轧糖),都带有外部存储器,并且每台设备都有 2 个存储空间:
- 具有 UUID 的内部设备内存等于 "null" - 很好,因为这在文档中有描述
- UUID 值格式如“4012-1A4B”的外部卡存储是什么无效的 UUID 格式并导致UUID.fromString抛出 IllegalArgumentException。
任何人都可以解释我做错了什么以及我应该如何获取外部存储的 UUID?或者只是 new API StorageStatsManager.queryStatsForUid(UUID storageUuid, int uid) 没用因为我们无法获取存储 UUID?
仅供参考:
此外,还有另一个 Whosebug 问题,其中 API 的用法被标记为正确的解决方案:
我发现这已经在 Android 上引发了错误: https://issuetracker.google.com/issues/62982912 所以我认为我的问题无法回答。
我认为每个包 的 应用程序信息 具有托管此应用程序的存储卷 UUID。
你可以通过 ,
ApplicationInfo ai = context.getPackageManager().getApplicationInfo(packagename, 0);
StorageStats storageStats = storageStatsManager.queryStatsForUid(ai.storageUuid, uid);
实际上 fromString(uuid_string) 需要一个 "long" UUID(大概有 4 或 8 个部分记不清了)。
但是下面的方法非常有效:
UUID.nameUUIDFromBytes(sv.getUuid().getBytes());