NetworkStatsManager的queryDetailsForUid()方法始终返回所有应用程序的旧网络使用情况

时间:2016-10-06 10:14:23

标签: android android-6.0-marshmallow android-trafficstats networkstatsmanager

我编写了一个代码来获取网络使用但queryDetailsForUid(int networkType,String subscriberId,long startTime,long endTime,int uid)此方法始终返回旧数据。 如何使用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){

    }

1 个答案:

答案 0 :(得分:3)

我使用了相同的方法,它不返回旧数据。 您可以使用以下方式测试存储桶的日期和时间:

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());