gpt4 book ai didi

android - NetworkStatsManager.queryDetailsForUid 未获取 "same"值作为 TrafficStats

转载 作者:行者123 更新时间:2023-12-02 05:14:53 25 4
gpt4 key购买 nike

我正在将新的 NetworkStats 类与 TrafficStats 进行比较,以测量网络接口(interface)和给定应用程序 (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 设置为一天的开始(在我的国家/地区为 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 应用的 NetworkStatsManager 启动后我没有获得与 TrafficStats 相同的值吗?

最佳答案

由于这不是您自己的应用的流量,您需要在设备设置中手动允许使用数据访问

关于android - NetworkStatsManager.queryDetailsForUid 未获取 "same"值作为 TrafficStats,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41105451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com