Я запускаю службу переднего плана, которая своевременно отбирает использование приложения пользователем.
Я заметил странное поведение функции UsageStats getTotalTimeInForeground(..)
— кажется, что статистика для текущего приложения переднего плана не обновляется, пока оно не перейдет в фоновый режим.
Код:
UsageStatsManager usageStatsManager = (UsageStatsManager)context.getSystemService(Context.USAGE_STATS_SERVICE);
Map<String, UsageStats> queryUsageStats = usageStatsManager.queryAndAggregateUsageStats(UsageStatsManager.INTERVAL_DAILY, 0, System.currentTimeMillis());
long totalTimeUsageInMillis = queryUsageStats.get("com.sample.app").
getTotalTimeInForeground();
После каждой итерации - totalTimeUsageInMillis
не изменяется, пока com.sample.app
находится на переднем плане. Как только я покину com.sample.app
- мой сервис получит обновленное значение
Я могу обойти эту проблему, сохраняя счетчик для запущенного в данный момент (= переднего плана) приложения и добавляя его к результату до тех пор, пока пользователь не переключит приложение, но я предпочитаю не добавлять дополнительную нагрузку на приложение.
Следующий снимок экрана был сделан из созданного мной тестера и показывает 2 вызова, выполненных с интервалом в 1 минуту: