首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我得到了我在networkstatsmanager.querydetailsforuid()方法中提供的不同的startTimestamp和endtimestamp。如何解决?

我得到了我在networkstatsmanager.querydetailsforuid()方法中提供的不同的startTimestamp和endtimestamp。如何解决?
EN

Stack Overflow用户
提问于 2020-04-25 12:46:04
回答 1查看 116关注 0票数 0

下面是我在NetworkStatsManager.queryDetailsForUid中提供的不同开始时间和结束时间的代码片段:

我想要获取开始时间和结束时间间隔内的应用程序数据使用情况,我正在调用方法,并从日历中传递以毫秒为单位的开始日期和结束日期,但在调用queryDetailsForUid()之后,它显示了一些不同的时间:

代码语言:javascript
复制
Calendar cal1 = Calendar.getInstance();
Date end = cal1.getTime();
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -100);
long start = cal.getTime().getTime();

long s = getPackageTxBytesMobile(uid, cal.getTimeInMillis(), cal1.getTimeInMillis());
long r = getPackageRxBytesMobile(uid, cal.getTimeInMillis(), cal1.getTimeInMillis());

下面是方法:

代码语言:javascript
复制
public long getPackageTxBytesMobile(int uid, long startDate, long endDate) {
    NetworkStats networkStats = null;

    NetworkStatsManager networkStatsManager = (NetworkStatsManager) 
    context1.getSystemService(Context.NETWORK_STATS_SERVICE);
    TelephonyManager tm = (TelephonyManager)context1.getSystemService(Context.TELEPHONY_SERVICE);
    String subId = null;
    if(ActivityCompat.checkSelfPermission(context1, Manifest.permission.READ_PHONE_STATE) ==
            PackageManager.PERMISSION_GRANTED) {
        subId = tm.getSubscriberId();
    }
    Log.d("Startdate: ",""+startDate+"   ");
    Log.d("Enddate: ",""+endDate+"    ");
    try {
        networkStats = networkStatsManager.queryDetailsForUid(
                ConnectivityManager.TYPE_MOBILE,
                subId,
                startDate,
                endDate ,
                uid);
    } catch (Exception e) {
        return -1;
    }
    NetworkStats.Bucket bucket = new NetworkStats.Bucket();
    networkStats.getNextBucket(bucket);
    long tx = bucket.getTxBytes();
    Log.d("tag1","StartTime: "+bucket.getStartTimeStamp());
    Log.d("tag1","EndTime: "+bucket.getEndTimeStamp());

    networkStats.close();
    return tx;
}

下面是日志输出:

代码语言:javascript
复制
2020-04-25 10:08:47.248 17889-17889/com.pkdev.mdmtemp D/tag1: StartTime: 1579168800000
2020-04-25 10:08:47.248 17889-17889/com.pkdev.mdmtemp D/tag1: EndTime: 1579176000000
2020-04-25 10:08:47.280 17889-17889/com.pkdev.mdmtemp D/Startdate:: 1579149527275   
2020-04-25 10:08:47.280 17889-17889/com.pkdev.mdmtemp D/Enddate:: 1587789527275    
2020-04-25 10:08:47.284 17889-17889/com.pkdev.mdmtemp D/tag1: StartTime: 1579154400000
2020-04-25 10:08:47.284 17889-17889/com.pkdev.mdmtemp D/tag1: EndTime: 1579161600000
2020-04-25 10:08:47.324 17889-17889/com.pkdev.mdmtemp D/Startdate:: 1579149527321   
2020-04-25 10:08:47.324 17889-17889/com.pkdev.mdmtemp D/Enddate:: 1587789527320    
2020-04-25 10:08:47.326 17889-17889/com.pkdev.mdmtemp D/tag1: StartTime: 1582466400000
2020-04-25 10:08:47.326 17889-17889/com.pkdev.mdmtemp D/tag1: EndTime: 1582473600000
2020-04-25 10:08:47.360 17889-17889/com.pkdev.mdmtemp D/Startdate:: 1579149527357   
2020-04-25 10:08:47.360 17889-17889/com.pkdev.mdmtemp D/Enddate:: 1587789527357    
2020-04-25 10:08:47.365 17889-17889/com.pkdev.mdmtemp D/tag1: StartTime: 1579161600000
2020-04-25 10:08:47.365 17889-17889/com.pkdev.mdmtemp D/tag1: EndTime: 1579168800000
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-25 21:45:10

您只使用了一个NetworkStats.Bucket,也可以使用hasNextBucket()获取以下存储桶。

因此,将你的方法的底部改为:

代码语言:javascript
复制
long tx = 0L
NetworkStats.Bucket bucket = new NetworkStats.Bucket();
while (networkStats.hasNextBucket()) {
    networkStats.getNextBucket(bucket);
    tx += bucket.getTxBytes();
    Log.d("tag1","StartTime: "+bucket.getStartTimeStamp());
    Log.d("tag1","EndTime: "+bucket.getEndTimeStamp());
}

networkStats.close();
return tx;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61421101

复制
相关文章

相似问题

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