Android NetworkStatsManager querySummaryForDevice странные результаты - PullRequest
0 голосов
/ 09 мая 2019

Я хочу получить мобильное потребление данных за указанный диапазон дат (1, 2, 5, 10 или 15 минут) с помощью метода querySummaryForDevice в NetworkStatsManager.

Это мой код:

public static long getTotalTrafficInRange(Context context, Date fromDate, Date toDate) throws UsageStatsNotActiveException, NoPermissionException
{
    boolean usageStatsActive = doIHavePermission(context);

    if (!usageStatsActive) {
        throw new UsageStatsNotActiveException(context);
    }

    long total = 0;

    TelephonyManager tele = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
        throw new NoPermissionException(Manifest.permission.READ_PHONE_STATE);
    }
    String actualSubscriberId = tele.getSubscriberId();

    NetworkStatsManager networkStatsManager = (NetworkStatsManager) context.getSystemService(Context.NETWORK_STATS_SERVICE);

    Date from = ConvertDateToCalendar(fromDate);
    Date to = ConvertDateToCalendar(toDate);

    //Total
    NetworkStats.Bucket bucket;
    try {
        bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE, actualSubscriberId, from.getTime(), to.getTime());

        if(bucket != null){
            total = (bucket.getRxBytes() + bucket.getTxBytes());
        }

    } catch (RemoteException e) {
        e.printStackTrace();
    }

    return total;
}

Я пытался преобразовать свою дату в календаре и обратно в Date с помощью этого кода:

public static Date ConvertDateToCalendar(Date date)
{
    Calendar fromDateCalendar = Calendar.getInstance();
    fromDateCalendar.setTime(date);

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.YEAR, fromDateCalendar.get(Calendar.YEAR));
    calendar.set(Calendar.MONTH, fromDateCalendar.get(Calendar.MONTH));
    calendar.set(Calendar.DAY_OF_MONTH, fromDateCalendar.get(Calendar.DAY_OF_MONTH));
    calendar.set(Calendar.HOUR_OF_DAY, fromDateCalendar.get(Calendar.HOUR_OF_DAY));
    calendar.set(Calendar.MINUTE, fromDateCalendar.get(Calendar.MINUTE));
    calendar.set(Calendar.SECOND, fromDateCalendar.get(Calendar.SECOND));
    calendar.set(Calendar.MILLISECOND, fromDateCalendar.get(Calendar.MILLISECOND));

    return calendar.getTime();
}

Это fromDate и toDate:

    //this date is new Date() minus 1,2,3,5,10 or 15 minutes, not more then this values
    fromDate = new Date(PersistentHelper.getLastDateUsedForCalculateData(context)); 

    //Calculate toDate
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date());
    if(!userChangeDateManually || !userChangeZone) {
        calendar.set(Calendar.SECOND, 0);
    }
    calendar.add(Calendar.MILLISECOND, -1);

    toDateWS = calendar.getTime();

Но totalBytesвозвращенный getTotalTrafficInRange это не реально.Если у меня есть телефон в WIFI в течение 1 часа, а затем я вызываю свою функцию с fromDate 15 минут назад, он возвращает очень длинное значение, а не 0. Как и ожидалось.

Существует ограничение на диапазон дат запроса querySummaryForDevice.метод NetworkStatsManager?Никакой подсказки не найдено в документации.

Кто-нибудь заметил это странное поведение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...