Android 是否可以在应用程序安装日期之前查询网络使用数据
我正在编写一个显示移动数据使用情况的应用程序的一部分,我还希望它显示用户安装应用程序之前的数据。当前,每当我在某个设备上安装应用程序之前查询某个时间范围的数据时,Android 是否可以在应用程序安装日期之前查询网络使用数据,android,kotlin,networkstatsmanager,Android,Kotlin,Networkstatsmanager,我正在编写一个显示移动数据使用情况的应用程序的一部分,我还希望它显示用户安装应用程序之前的数据。当前,每当我在某个设备上安装应用程序之前查询某个时间范围的数据时,NetworkStatsManager.queryDetails都会返回一个不包含bucket的NetworkStats对象 我已经在应用程序中获得了安装日期后移动数据使用的正确数据 奇怪的是,我试图删除设置中的所有缓存/数据,卸载并重新安装应用程序。在此之后,该应用程序仍然能够在卸载之前查询数据,但在我第一次安装该应用程序之前无法查询
NetworkStatsManager.queryDetails
都会返回一个不包含bucket的NetworkStats
对象
我已经在应用程序中获得了安装日期后移动数据使用的正确数据
奇怪的是,我试图删除设置中的所有缓存/数据,卸载并重新安装应用程序。在此之后,该应用程序仍然能够在卸载之前查询数据,但在我第一次安装该应用程序之前无法查询数据。我的直觉是,在用户授予PACKAGE\u USAGE\u STATS
、ACCESS\u NETWORK\u STATE
或READ\u PHONE\u STATE
权限之前,Android不允许您访问数据
和的文档似乎没有提到任何关于数据历史的内容
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
获取存储桶?是的,这是可能的。只需选择您想要的时间进行InternalStatManager
val summaryStats = networkStatManager!!.querySummary(
networkType, subscriberId, startTime, endTime
)