Альтернатива 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 (). Недостаток: он требует дополнительного разрешения и дает вам только имя пакета - не активность - но дает вам данные в реальном времени.

Другие вопросы по тегам