Альтернатива getRunningTasks в Android L
Хорошо задокументировано, что getRunningTasks устарела в Android L. Я использовал это, чтобы добиться максимальной активности, и это была важная особенность моего приложения. Сотрудник Google пообещал, что новое решение в Android L обещано не полностью. Решение гласит:
"для L мы планируем иметь новое решение, которое будет учитывать некоторые из существующих вариантов использования getRecentTasks(): мы надеемся представить сервис статистики внутреннего использования системы в новой расширенной форме, доступной сторонним приложениям через SDK.
Новая служба статистики использования должна иметь две основные части информации. Во-первых, он предоставит агрегированную статистику времени, проведенного пользователем в каждом приложении, и время последнего запуска этих приложений, сгруппированное по дням, неделям, месяцам и годам. Во-вторых, он будет включать подробные события использования за последние несколько дней, описывающие время и ComponentName, когда любая активность переходит на передний план или фон.
Доступ к этим новым данным об использовании потребует, чтобы пользователь явно предоставил приложению доступ к статистике использования через новый пользовательский интерфейс настроек. Они смогут видеть все приложения, которые имеют доступ, и отзывать доступ в любой точке.
Я понимаю, что это не будет охватывать каждое возможное использование старого API getRecentsTask, и я прошу прощения за это. Тем не менее, для того, что мы считаем ключевым текущим использованием API, новый API статистики использования должен быть гораздо более надежным и эффективным ".
Подробнее об этом можно прочитать здесь: https://code.google.com/p/android-developer-preview/issues/detail?id=29
Я попытался посмотреть в документации по Android L, но не могу найти ничего, что говорит об услуге статистики использования, упомянутой выше. Кто-нибудь использовал этот API? Кто-нибудь может указать мне на документацию для этого?
1 ответ
Системная статистика API, вызванная вашим вопросом, также представлена здесь, а подробный API - здесь. Насколько я вижу, этот API не позволит вам получить текущую высшую активность.
т.е. у вас есть возможность получать UsageEvent
с типом MOVE_TO_FOREGROUND
используя UsageStatsManager.queryEvents
но в соответствии с Javadoc:
Последние несколько минут журнала событий будут усечены для предотвращения злоупотреблений со стороны приложений.
Так что это действительно API для получения статистики, а не для получения информации в реальном времени. (обратите внимание, что сейчас устарела getRunningTasks()
не был предназначен для извлечения данных в реальном времени: javadoc)
С другой стороны, если вас интересует только верхняя активность вашего собственного приложения: вы можете использовать getAppTasks()
возвращая List<AppTask>
где вы можете получить RecentTaskInfo с getTaskInfo
РЕДАКТИРОВАТЬ: другой подход предоставляется здесь.
Он основан на UsageStats и UsageStats.getLastTimeUsed (). Недостаток: он требует дополнительного разрешения и дает вам только имя пакета - не активность - но дает вам данные в реальном времени.