我整天都在为一些微不足道的事情而战斗,但现在我只是放弃并需要你的帮助。
在用于读取应用代码/数据/缓存/大小的新Oreo API中,我们需要存储UUID(StorageStatsManager.queryStatsForUid(UUID storageUuid, int uid))。
存储UUID可以从StorageManager.getStorageVolumes()获取,返回包含UUID的所有存储的列表。
问题就出现了:返回列表中的UUID是String格式,而StorageStatsManager.queryStatsForUid(UUID storageUuid, int uid)需要UUID对象 - 没有简单的说法 - 存在方法UUID.fromString(String name)将其转换为一段时间......但是等等,来自StorageManager列表的UUID值与UUID解析器不兼容 - WHAT?!我已经检查了2台设备(一台是Oreo,另一台是Nougat),都有外部存储器对于每个设备,我得到2个存储空间:
任何人都可以解释一下我做错了什么以及如何获得外部存储的UUID?或者只是新的API StorageStatsManager.queryStatsForUid(UUID storageUuid, int uid)没用,因为我们无法获取存储UUID?
供参考:
还有一个StackOverflow问题,其中此API的使用被标记为正确的解决方案:https://stackoverflow.com/a/44708209/1946366是什么让我更加沮丧......
答案 0 :(得分:1)
我认为每个软件包的应用程序信息都有存储此应用程序的存储卷UUID 。
你可以通过
获得它ApplicationInfo ai = context.getPackageManager().getApplicationInfo(packagename, 0);
StorageStats storageStats = storageStatsManager.queryStatsForUid(ai.storageUuid, uid);
答案 1 :(得分:1)
实际上fromString(uuid_string)带有一个“长” UUID(大约有4或8个部分无法准确记住)。
但是,以下方法非常适用:
UUID.nameUUIDFromBytes(sv.getUuid().getBytes());
答案 2 :(得分:0)
我发现这已经在Android上引发了错误: https://issuetracker.google.com/issues/62982912 所以我认为我的问题是无法回答的。