NetworkStatsManager 的 queryDetailsForUid() 方法总是 returns 所有应用程序的旧网络使用情况

NetworkStatsManager's queryDetailsForUid() method always returns old network usage for all the apps

我已经编写了一个代码来获取网络使用情况,但是 queryDetailsForUid(int networkType, String subscriberId,long startTime, long endTime, int uid) 这种方法总是 returns 旧数据。 如何使用 NetworkstatsManager API 获取更新的数据?

    try {
            NetworkStats  networkStats = networkStatsManager.queryDetailsForUid(
                            ConnectivityManager.TYPE_WIFI,
                            "",
                    0, System.currentTimeMillis()
                    ,
                    packageUid);

            NetworkStats.Bucket bucket = new NetworkStats.Bucket();
            networkStats.getNextBucket(bucket);
            Log.d("RX  "+packageUid," "+bucket.getRxBytes());
            Log.d("TX  "+packageUid," "+bucket.getTxBytes());

    } catch(Exception e){

    }

我用了同样的方法,它没有return旧数据。 您可以使用以下方法测试存储桶的日期和时间:

Log.d(TAG,"StartTime: "+bucket.getStartTimeStamp());
Log.d(TAG,"EndTime: "+bucket.getEndTimeStamp());

检查结束时间戳,您应该看到当前日期和时间。 AFAIK,每个桶是 2 小时。

完整代码:

            do {
            NetworkStats.Bucket bucket = new NetworkStats.Bucket();
            networkStatsByApp.getNextBucket(bucket);
            Log.d(TAG, "Bytes Recieved" + bucket.getRxBytes());
            Log.d(TAG, "Bytes Transfered" + bucket.getTxBytes());
            Log.d(TAG, "Bucket UID" + bucket.getUid());
            Log.d(TAG,"StartTime: "+bucket.getStartTimeStamp());
            Log.d(TAG,"EndTime: "+bucket.getEndTimeStamp());
            totalBuckets++;

        }while (networkStatsByApp.hasNextBucket());