NetworkStatsManager-最早的开始时间是多少?

时间:2018-09-09 16:30:00

标签: android networkstatsmanager android-data-usage

我正在使用NetworkStatsManager类来检索应用程序的数据使用情况。

如果我提供2018年1月1日作为开始时间,则表明我的手机已发送出5,4 GB。
如果我提供2017年1月1日,它仍然显示5,4 GB。

这让我假设开始时间有所限制。不幸的是,文档中没有提及任何内容。

那么,我们可以返回多少时间?

代码:
这是使用querySummary检索数据的代码:

private long[] getBytesSummary(Context context, int networkType, Calendar calendar) {
    NetworkStatsManager networkStatsManager = (NetworkStatsManager) context.getSystemService(Context.NETWORK_STATS_SERVICE);
    NetworkStats networkStats = null;
    try {
        networkStats = networkStatsManager.querySummary(
                networkType,
                Util.getSubscriberId(context, networkType),
                calendar.getTimeInMillis(),
                System.currentTimeMillis());
    } catch (RemoteException e) {
        if (debug) Log.e(TAG, "getBytesSummary: " + e.toString());
    }
    long[] result = new long[2];
    long totalRxBytes = 0;
    long totalTxBytes = 0;

    NetworkStats.Bucket bucket = new NetworkStats.Bucket();
    if (networkStats != null) {
        while (networkStats.hasNextBucket()) {
            networkStats.getNextBucket(bucket);
            int uid = bucket.getUid();
            long uidRxBytes = bucket.getRxBytes();
            long uidTxBytes = bucket.getTxBytes();
            if (uidsWithNetworkUsageMap.indexOfKey(uid) < 0) {
                long[] uidBytes = new long[2];
                uidBytes[0] = uidRxBytes;
                uidBytes[1] = uidTxBytes;
                uidsWithNetworkUsageMap.put(uid, uidBytes);
            } else {
                long[] value = uidsWithNetworkUsageMap.get(uid);
                value[0] = value[0] + uidRxBytes;
                value[1] = value[1] + uidTxBytes;
                uidsWithNetworkUsageMap.put(uid, value);
            }
            totalRxBytes += bucket.getRxBytes();
            totalTxBytes += bucket.getTxBytes();
        }
        networkStats.close();
    }
    result[0] = totalRxBytes;
    result[1] = totalTxBytes;
    return result;
}

正如您在上面看到的,我为该方法提供了一个日历对象。
这是我获取本年度日历的方式:

public static Calendar getCalendarCurrentYear() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_YEAR, 1);
        // for 0-12 clocks
        calendar.set(Calendar.HOUR, 0);
        calendar.set(Calendar.AM_PM, Calendar.AM);
        // for 0-24 clocks
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
//        calendar.set(Calendar.YEAR, 2017);
        Log.i("DataUsage", "getCalendarCurrentYear: " + calendar.getTime());
        return calendar;
    }

这将返回2018年1月1日星期一格林尼治标准时间+01:00。
如果我现在将其设置为2017,则结果与2018相同。

我做错什么了吗?

编辑:
我只是做了一些测试,限制似乎是3个月。
大于3个月的开始时间将产生相同的值。
任何人都可以确认从现在起的超过3个月的成功运作了吗?? 还是有任何官方文件解决这个问题?

1 个答案:

答案 0 :(得分:0)

它显示自设备上次恢复出厂设置以来的数据使用情况。 可能是您提供的日期早于设备的出厂重置日期。

希望我会有所帮助。