Вопрос
Я хочу получить список 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 для запроса недель / месяцев / лет, будет очень полезным. Заранее спасибо.