Альтернатива getRunningTasks в Android L

Было хорошо документировано, что getRunningTasks теперь не рекомендуется в Android L. Я использовал это, чтобы получить максимальную активность, и это была важная функция моего приложения. Хотя это не завершено, новое решение в Android L было обещано сотрудником Google. В решении говорится:

"для L мы планируем иметь новое решение, которое будет касаться некоторых существующих вариантов использования getRecentTasks(): мы надеемся разоблачить систему внутренних характеристик использования систем в новой и расширенной форме, доступной для сторонних разработчиков приложений через SDK.

Новая служба статистики использования должна содержать две основные части информации. Во-первых, он предоставит агрегированную статистику того времени, которое пользователь потратил в каждом приложении, и время последнего запуска этих приложений, свернутое в течение нескольких дней, недель, месяцев и лет. Во-вторых, он будет включать подробные события использования в течение последних нескольких дней, описывая время и имя компонента, когда какое-либо действие переходит на передний план или фон.

Доступ к этим новым данным использования потребует, чтобы пользователь явно предоставил доступ к использованию статистики использования через новый пользовательский интерфейс настроек. Они смогут видеть все приложения, которые имеют доступ и отменяют доступ в любой момент.

Я понимаю, что это не будет охватывать всевозможное использование старого API getRecentsTask, и я прошу прощения за это. Однако для того, что мы рассматриваем как ключевое текущее использование API, новый API статистики использования должен быть гораздо более надежным и эффективным ".

Подробнее об этом можно прочитать здесь: https://code.google.com/p/android-developer-preview/issues/detail?id=29#c50

Я пробовал смотреть в документации на Android L, но не могу найти ничего, что говорит об использовании службы статистики, упомянутой выше. Кто-нибудь использовал этот API? Может ли кто-нибудь указать мне на документацию для этого?

Ответ 1

Представленная в вашем вопросе системная статистика api также представлена ​​здесь, а подробный API здесь. Насколько я вижу, этот API не позволит вам получить текущую верхнюю активность.

то есть. у вас есть возможность получить UsageEvent с типом MOVE_TO_FOREGROUND, используя UsageStatsManager.queryEvents, но согласно javadoc:

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

Так что это действительно API для получения статистики, а не для получения информации в реальном времени. (обратите внимание, что теперь устаревший getRunningTasks() не предназначен для получения данных в реальном времени: javadoc)

С другой стороны, если вас интересует только верхняя активность собственного приложения: вы можете использовать getAppTasks(), возвращая List<AppTask>, где вы можете получить RecentTaskInfo с getTaskInfo


EDIT: предоставляется другой подход here.

Он основан на UsageStats и UsageStats.getLastTimeUsed(). Недостаток: он требует дополнительного разрешения и дает вам только имя пакета - не действие -, но оно дает вам данные в реальном времени.