NetworkStatsManager.queryDetailsForUid没有获得与TrafficStats“相同”的值

我正在将新的NetworkStats类与TrafficStats进行比较,以测量网络接口和给定应用程序的流量(pex Chrome)

由于TrafficStats自设备启动后具有值,因此我正在执行的测试是:

  1. 重启电话。
  2. 打开Chrome。
  3. 下载10 MB数据(通过WiFi)。

使用TrafficStats获得的数据是:

 TrafficStats.getTotalRxBytes() aprox 17.21 MB TrafficStats.getUidRxBytes(chromeUid) aprox 13.22 MB 

我授予NetworkStats的权限,我获得的值是这样的:

 wifiBucket.getRxBytes() + mobileBucket.getRxBytes() aprox 17.23 MB dataFromWiFiBucket[1] + dataFromMobileBucket[1] gives 0 bytes 

NetworkStats获取数据的代码如下:

 long timeStamp = System.currentTimeMillis(); long bootTime = System.currentTimeMillis() - SystemClock.elapsedRealtime(); NetworkStats.Bucket wifiBucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_WIFI, null, bootTime, timeStamp); NetworkStats.Bucket mobileBucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE, subscriberID, bootTime, timeStamp); NetworkStats wifiBucketForApp = networkStatsManager.queryDetailsForUid(ConnectivityManager.TYPE_WIFI, null, bootTime, timeStamp, chromeUid); NetworkStats mobileBucketForApp = networkStatsManager.queryDetailsForUid(ConnectivityManager.TYPE_MOBILE, subscriberID, bootTime, timeStamp, chromeUid); long[] dataFromWiFiBucket = getDataFromBucket(wifiBucketForApp); long[] dataFromMobileBucket = getDataFromBucket(mobileBucketForApp); 

getDataFromBucket是:

 @RequiresApi(api = Build.VERSION_CODES.M) public static long[] getDataFromBucket(NetworkStats bucketForApp) { long dataTx = 0; long dataRx = 0; NetworkStats.Bucket bucket; while (bucketForApp.hasNextBucket()) { bucket = new NetworkStats.Bucket(); bucketForApp.getNextBucket(bucket); dataTx += bucket.getTxBytes(); dataRx += bucket.getRxBytes(); } return new long[]{dataTx, dataRx}; } 

我已经读过两个小时的桶,所以我添加了这段代码:

 if (bootTime > (timeStamp - TimeUnit.HOURS.toMillis(TWO_HOURS))) { bootTime = timeStamp - TimeUnit.HOURS.toMillis(TWO_HOURS); } 

但是chrome的数据仍为0,因为wifiBucketForAppmobileBucketForApp没有任何存储桶。

如果我将bootTime设置为bootTime的开头(我国的18:30),我会获得:

 wifiBucket.getRxBytes() + mobileBucket.getRxBytes() aprox 44.74 MB (expected because is since the beginning of the day) dataFromWiFiBucket[1] + dataFromMobileBucket[1] gives 26.32 MB 

有没有人知道为什么我从NetworkStatsManager为Chrome应用程序启动设备后,我没有获得与TrafficStats相同的值?