Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否可以在应用程序安装日期之前查询网络使用数据_Android_Kotlin_Networkstatsmanager - Fatal编程技术网

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
        )