NetworkStatsManager.queryDetailsForUid 未获得与 TrafficStats "相同"的值



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

由于TrafficStats具有值,因为设备启动了我执行的测试是:

  1. 重新启动电话。
  2. 开放铬。
  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设置为一天的开始(我的国家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

有人知道为什么我没有获得与TrafficStats相同的值,因为chrome应用程序的 NetworkStatsManager设备引导?

,因为它不是您自己的应用程序的流量

相关内容

  • 没有找到相关文章

最新更新