我正在编写一个应用程序的一部分,显示移动数据的使用情况,我也希望它能显示用户安装应用程序之前的数据。目前,每当我在某个设备上安装应用程序之前查询某个时间范围的数据时,NetworkStatsManager.queryDetails都会返回一个不包含buckets的NetworkStats对象。
我已经设法在应用程序中安装日期之后获得了有关移动数据使用情况的正确数据。
奇怪的是,我试图删除设置中的所有缓存/数据,并卸载并重新安装应用程序。在此之后,应用程序仍然可以在卸载之前查询数据,但在我第一次安装应用程序之前就不能了。我的直觉是,在用户授予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获取存储桶呢?
发布于 2021-02-18 20:43:58
是的,这是可能的。只需选择InternalStatManager你想要的时间
val summaryStats = networkStatManager!!.querySummary(
networkType, subscriberId, startTime, endTime
)https://stackoverflow.com/questions/57254400
复制相似问题