Обнаружение активности Android

Я искал stackoverflow для этого вопроса и нашел: Android, обнаружение при запуске других приложений и Надежный способ обнаружения запуска приложения из дома/рабочего стола, который отвечает на мой вопрос, но этого все еще недостаточно.

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

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

Базовая информация

  • Я собираю свой собственный код на базе ОС Android (4.2), поэтому у меня есть доступ к все.
  • Я также запускаю пусковую установку.
  • Он должен передать CTS и быть одобрен Google.
  • Я могу сделать приложение с системными привилегиями.
  • Я знаю, что это может быть проблемой безопасности для Google.

Некоторые решения

Недавние приложения можно найти через ActityManager, метод getRecentApps, поэтому теперь проблема там.

Я искал в Интернете для этого и уже нашел следующие решения:

  • Используйте службу для запроса метода activityManager, getRunningTasks каждые X секунд и создания списка (неадекватная информация, также использующая много batery).
  • Используйте logcat для получения этой информации (кажется, что это взломать мне, нужны системные разрешения)
  • Измените сам ActivityManager, чтобы предоставить эту информацию (скорее всего, не пройдут тесты CTS)
  • Используйте панель запуска для проверки запущенных приложений (пропускает приложения, запущенные в других приложениях).

Что-нибудь еще, что я пропустил?

Спасибо заранее, Tiago Costa​​p >

Ответ 1

Реализация диалогового окна последних приложений Android по умолчанию - лучшая ссылка для вас, посмотреть здесь..check reloadButtons()

final ActivityManager am = (ActivityManager)
                context.getSystemService(Context.ACTIVITY_SERVICE);
        final List<ActivityManager.RecentTaskInfo> recentTasks =
                am.getRecentTasks(MAX_RECENT_TASKS, ActivityManager.RECENT_IGNORE_UNAVAILABLE);

Вы можете попробовать аналогичным образом.