Прослушивать события ActivityManager?
-
20-09-2019 - |
Вопрос
можно ли каким-то образом прослушивать события ActivityManager, напримеркогда начинаются действия?Отправляет ли ActivityManager широковещательные рассылки?Я не нашел ничего, указывающего на то, что это так.
Что мне в принципе нужно сделать:Я хочу, чтобы мое приложение запускало одно из моих действий всякий раз, когда запускается определенное (стороннее) приложение / фокусируется на нем.Проблема в том, что это должно произойти до фактического отображения стороннего приложения.
Что я пробовал до сих пор в качестве обходных путей:
- Вывод Logcat:Я запрашиваю logcat каждые 0,8 с (фильтруется только для отображения событий ActivityManager), но это расходует много ресурсов
- Выполнение задач:Это также сильно замедляет работу телефона и не очень безопасно, так как какое-то действие может быть запущено, но в данный момент не находится в фокусе
Есть какие-нибудь идеи?
Решение
Я полагаю, что на самом деле нет другого устаревшего способа обработки состояния системы 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