我正在编写显示移动数据使用情况的应用程序的一部分,并且我还希望它显示用户安装应用程序之前的数据。目前,每当我在某个设备上安装应用程序之前查询某个时间范围的数据时,都会NetworkStatsManager.queryDetails
返回一个NetworkStats
不包含存储桶的对象。
在应用程序安装日期之后,我已经设法获得有关移动数据使用情况的正确数据。
奇怪的是,我试图删除设置中的所有缓存/数据并卸载并重新安装该应用程序。在此之后,该应用程序仍然能够在卸载它之前查询数据,但不是从我第一次安装该应用程序之前的数据。我的直觉是,Android 不允许您在PACKAGE_USAGE_STATS
、ACCESS_NETWORK_STATE
或READ_PHONE_STATE
用户授予权限之前访问数据。
NetworkStats和NetworkStatsManager的文档似乎没有提及有关数据历史的任何内容。
NetworkStatsManager 是这样获得的:
val networkStatsManager by lazy {
context.getSystemService(Context.NETWORK_STATS_SERVICE) as NetworkStatsManager
}
并在此处获得 NetworkStats 对象:
mobileDataNetworkStats = networkStatsManager.queryDetails(
ConnectivityManager.TYPE_MOBILE,
getSubscriberId(context, ConnectivityManager.TYPE_MOBILE),
from.time,
to.time)
这就是我迭代桶的方式
val bucket: NetworkStats.Bucket = NetworkStats.Bucket()
mobileDataNetworkStats.getNextBucket(bucket)
var currentUsage = usagePerUid[bucket.uid]
currentUsage = when (currentUsage) {
null -> 0
else -> currentUsage
}
currentUsage += bucket.rxBytes
currentUsage += bucket.txBytes
usagePerUid[bucket.uid] = currentUsage
那么是否可以通过queryDetails
或querySummary
在安装日期之前(或从用户授予权限的日期之前)获取存储桶?