Слушать события ActivityManager? - PullRequest
1 голос
/ 16 февраля 2010

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

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

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

  1. Вывод LogCat: я запрашиваю LogCat каждые 0,8 с (фильтруется, чтобы показывать только события ActivityManager), но это съедает много ресурсов
  2. getRunningTasks: также сильно тормозит телефон и не очень безопасен, так как действие может выполняться, но в данный момент не в фокусе

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 17 февраля 2010

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

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

0 голосов
/ 12 мая 2012

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

0 голосов
/ 16 февраля 2010

Полагаю, на самом деле нет другого унаследованного способа справиться с состоянием глобальной системы, только

 (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

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

Подробнее см. Документы

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

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

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

...