3

1)我正在检查牛轧糖,我已经获得以下许可

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

2) 代码片段

    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)当我给出间隔 Start Time - 0 End Time - 时System.currentTimeMillis(),得到正确的数据。但是当我给出其他时间间隔时开始时间 - 1488441600(3 月 2 日)结束时间 - 1488902400(3 月 7 日 11;30)上述方法返回 0。并且 bucket.getEndTimeStamp()bucket.getStartTimeStamp()日志中打印为 0。任何人都知道如何从上述查询中获取数据对于特定的时间间隔请纠正我做错的地方。

4

1 回答 1

4

在我看来,您实际上是在几秒钟内通过,而它应该以毫秒为单位。下面我已将您的时间转换为毫秒。您可以尝试将代码调整为以下内容吗?

try {
        networkStats = networkStatsManager.queryDetailsForUid(
                ConnectivityManager.TYPE_WIFI,
                "",
                1488441600000L ,
                1488902400000L ,
                packageUid);
    } catch (RemoteException e) {
        e.printStackTrace();
}
于 2017-03-24T14:58:11.197 回答