Вопрос

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

Что мне в принципе нужно сделать:Я хочу, чтобы мое приложение запускало одно из моих действий всякий раз, когда запускается определенное (стороннее) приложение / фокусируется на нем.Проблема в том, что это должно произойти до фактического отображения стороннего приложения.

Что я пробовал до сих пор в качестве обходных путей:

  1. Вывод Logcat:Я запрашиваю logcat каждые 0,8 с (фильтруется только для отображения событий ActivityManager), но это расходует много ресурсов
  2. Выполнение задач:Это также сильно замедляет работу телефона и не очень безопасно, так как какое-то действие может быть запущено, но в данный момент не находится в фокусе

Есть какие-нибудь идеи?

Это было полезно?

Решение

Я полагаю, что на самом деле нет другого устаревшего способа обработки состояния системы glabal, только

 (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

ActivityManager.getRecentTasks() - возвращает список задач, которые выполняются в данный момент, причем самые последние являются первыми, а более старые - следующими по порядку.

Для получения подробной информации проверьте Документы

Возможно, хотя Android - это Linux, вы можете запускать системные инструменты, такие как

Runtime.getRuntime().exec("ps -aux | grep smth")

Но я думаю, что было бы трудно обнаружить конкретное java-приложение.

Другие советы

Я думаю, вы можете использовать режим запуска, чтобы определить, какое действие следует запустить на верхний уровень.Пожалуйста, проверьте вопрос: Режим запуска Android singleTask или singleInstance?.Может быть, это поможет вам.

Я заглянул в исходный код Android, но, похоже, там не транслируются какие-либо события.

https://android.googlesource.com/platform/packages/providers/ApplicationsProvider

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top