我正在将新的NetworkStats
类与TrafficStats
比较,以测量网络接口(interface)和给定应用程序的流量(pex Chrome)
由于TrafficStats
自设备启动以来具有值,因此我正在执行的测试是:
通过
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,因为
wifiBucketForApp
和mobileBucketForApp
没有任何存储桶。如果我将
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
有人知道为什么从Chrome应用程序的
TrafficStats
启动设备以来,我没有获得与ojit_code相同的值吗? 最佳答案
由于不是您自己应用的流量,因此您需要在设备设置中手动允许使用情况数据访问。
关于android - NetworkStatsManager.queryDetailsForUid未获得 "same"值作为TrafficStats,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41105451/