对于给定时间间隔,NetworkStatsManager.queryDetailsForUid未获取正确的数据

时间:2017-03-08 05:20:18

标签: android networkstatsmanager

1)我正在检查Nougat,我已经获得了以下许可

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions"/>

2)Code Snipet

    public long getPackageRxBytesWifi() {
    NetworkStats networkStats = null;
    NetworkStats.Bucket bucket;
    long totalData= 0;
    try {
        networkStats = networkStatsManager.queryDetailsForUid(
                ConnectivityManager.TYPE_WIFI,
                "",
                1488441600 ,
                1488902400 ,
                packageUid);
    } catch (RemoteException e) {
        e.printStackTrace();
    }

    do {
        bucket = new NetworkStats.Bucket();
        networkStats.getNextBucket(bucket);
        Log.i("abc", "Start Time Stamp: " + bucket.getStartTimeStamp());
        Log.i("abc", "End Time Stamp: " + bucket.getEndTimeStamp());
        totalData= totalData+ bucket.getRxBytes() + bucket.getTxBytes();
    }while (networkStats.hasNextBucket());
    return totalData;

3)当我给出间隔时 开始时间 - 0  结束时间 - System.currentTimeMillis(),获取正确的数据。 但是当我给出其他时间间隔时 开始时间 - 1488441600(3月2日)  结束时间 - 1488902400(3月11日; 30日)  上面的方法返回0。 并且bucket.getEndTimeStamp()bucket.getStartTimeStamp()在Log中打印为0。 任何人都知道如何从特定时间间隔的上述查询中获取数据 请纠正我在哪里做错了。

1 个答案:

答案 0 :(得分:3)

在我看来,你实际上是在几秒钟之内传递它应该是毫秒。下面我将您的时间转换为毫秒。您可以尝试将代码调整为以下内容吗?

try {
        networkStats = networkStatsManager.queryDetailsForUid(
                ConnectivityManager.TYPE_WIFI,
                "",
                1488441600000L ,
                1488902400000L ,
                packageUid);
    } catch (RemoteException e) {
        e.printStackTrace();
}