首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetworkStatsManager -最早的开始时间是什么时候?

NetworkStatsManager -最早的开始时间是什么时候?
EN

Stack Overflow用户
提问于 2018-09-09 16:29:59
回答 1查看 494关注 0票数 1

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

如果我提供01.01.2018作为启动时间,它显示我的手机已经发送了5,4GB。

如果我提供了01.01.2017,它仍然显示5,4GB。

这让我假设在某种程度上,开始的时间是有限度的。不幸的是,这些文件没有提到这方面的任何内容。

那么,我们能有多少时间回去?

代码:

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

代码语言:javascript
复制
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;
}

正如您在上面看到的,我给这个方法提供了一个日历对象。

这就是我如何得到本年度的日历:

代码语言:javascript
复制
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月01日00:00:00 GMT+01:00。

如果我现在把它定在2017年,结果和2018年一样。

我做错了什么吗?

编辑:

我刚做了一些测试,限制似乎是3个月。

任何超过3个月的开始时间都会导致相同的值。

有谁能确认,从现在的时间起,已经运行了3个多月了,

或者是否有任何官方文件来解决这一问题?

EN

回答 1

Stack Overflow用户

发布于 2020-06-18 06:03:14

它显示了自上一次工厂重置设备以来的数据使用情况。可能是您提供的日期比您的设备的工厂重置更早。

希望我能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52246504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档