UsageStatsManager не возвращает правильные результаты за неделю или месяц - PullRequest
0 голосов
/ 04 мая 2020

Вопрос

Я хочу получить список UsageStats за неделю или месяц. Однако выходные данные часто имеют перекрывающиеся интервалы, например, с 29 апреля по понедельник 4 мая, когда я запрашиваю ежемесячные данные (см. Последний результат с отметками времени ниже).

Итак, мой вопрос: как мне получить статистику использования за конкретную неделю (например, с понедельника по воскресенье) или за месяц (например, с 1 апреля по 31 апреля), используя UsageStatsManager?

Фон

В моем приложении Android я использую UsageStatsManager для получения общего времени на переднем плане в неделю / месяц. Этот пост о том, как использовать UsageStatsManager, уже очень полезен, а также этот пост о том, как UsageStatsManager дает неправильные ежедневные результаты (я использую этот метод для ежедневной статистики использования, которая работает нормально сейчас).

Проблема

Проблема начинается, когда я пытаюсь получить статистику использования за недельный / месячный интервал. В документации UsageStatsManager указано, что

Данные об использовании агрегируются во временные интервалы: дни, недели, месяцы и годы.

Но вывод, который я получаю от запроса UsageStatsManager, очень отличается . Пример того, как я получаю список объектов UsageStats за последние два месяца:

    Calendar endCalendar = Calendar.getInstance();
    long endTime = endCalendar.getTimeInMillis();
    Calendar startCalendar = Calendar.getInstance();
    startCalendar.add(Calendar.MONTH, -2); // since two months.
    long startTime = startCalendar.getTimeInMillis();
    UsageStatsManager usm = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
    List<UsageStats> result = usm.queryUsageStats(UsageStatsManager.INTERVAL_MONTHLY, startTime, endTime);

Однако, когда я go над List<UsageStats> result и регистрирую метки времени пакетов и их время переднего плана, я получаю кучу отметок времени, но они не в месячном интервале вообще. Пример меток времени, которые я получил для приложения «Контакты» из result:

ForegroundTime: 4447 first=Wed Mar 04 03:53:28 GMT+01:00 2020 last=Fri Mar 06 11:46:18 GMT+01:00 2020
ForegroundTime: 176383 first=Fri Mar 06 11:46:18 GMT+01:00 2020 last=Tue Mar 17 07:53:54 GMT+01:00 2020
ForegroundTime: 14337 first=Tue Mar 17 07:53:54 GMT+01:00 2020 last=Tue Mar 17 20:03:31 GMT+01:00 2020
ForegroundTime: 0 first=Tue Mar 17 20:03:31 GMT+01:00 2020 last=Fri Mar 20 14:32:26 GMT+01:00 2020
ForegroundTime: 0 first=Fri Mar 20 14:32:26 GMT+01:00 2020 last=Mon Mar 23 00:12:11 GMT+01:00 2020
ForegroundTime: 0 first=Mon Mar 23 04:27:16 GMT+01:00 2020 last=Mon Mar 23 17:00:29 GMT+01:00 2020
ForegroundTime: 0 first=Mon Mar 23 17:00:29 GMT+01:00 2020 last=Sat Mar 28 00:52:10 GMT+01:00 2020
ForegroundTime: 0 first=Sat Mar 28 00:52:10 GMT+01:00 2020 last=Fri Apr 03 06:45:08 GMT+02:00 2020
ForegroundTime: 81481 first=Fri Apr 03 06:45:08 GMT+02:00 2020 last=Thu Apr 09 18:04:05 GMT+02:00 2020
ForegroundTime: 0 first=Thu Apr 09 18:04:05 GMT+02:00 2020 last=Thu Apr 16 10:31:23 GMT+02:00 2020
ForegroundTime: 157189 first=Thu Apr 16 10:31:23 GMT+02:00 2020 last=Sun Apr 26 02:10:31 GMT+02:00 2020
ForegroundTime: 0 first=Sun Apr 26 02:10:31 GMT+02:00 2020 last=Wed Apr 29 13:21:12 GMT+02:00 2020
ForegroundTime: 43516 first=Wed Apr 29 13:21:12 GMT+02:00 2020 last=Mon May 04 17:45:43 GMT+02:00 2020

, который, кажется, почти случайно разбит на интервалы.

Любые ссылки / объяснения, почему UsageStatsManager такое поведение, или пример приложения с открытым исходным кодом, использующего UsageStatsManager для запроса недель / месяцев / лет, будет очень полезным. Заранее спасибо.

...