Как получить какой-либо идентификатор самого верхнего действия?

У меня есть сервис, и его поведение должно измениться, когда самое верхнее Действие изменяется. Скажите, Действие A активно, и затем сервис запускает некоторую обработку. Эта обработка должна остановиться, когда Действие A больше не видимо: пользователь оттеснил, "Home" или сделал что-либо еще, что делает Действие невидимой операцией. Это Действие Необходимость не знать о сервисе - т.е. этому не, должно быть, придется явно сообщить Сервису, что это уходит.

В ореховой скорлупе, там путь к:

  • Получите любой вид идентификации (ссылка на объект, имя класса, идентификатор, и т.д.) самого верхнего Действия,
  • Получите уведомление, когда самое верхнее Действие изменится?

P.S. Это может походить на вредоносное поведение, но это не! Это - законный пример использования!

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

11
задан Ignas Limanauskas 3 August 2010 в 07:12
поделиться

1 ответ

Эта верхняя часть устарела. См. ответ в нижней части.

Я предполагаю, что вы имеете в виду Activities внутри вашего собственного приложения:

Все Activities вызывают onResume() при выходе на передний план и onPause() при выходе с переднего плана. Просто переопределите этот метод со своей функциональностью (не забудьте вызвать super.onResume() и super.onPause() соответственно!)

Что касается идентификатора, возможно, вы могли бы сделать так, чтобы у вашей Службы был статический метод, который вызывается Активностью, выходящей на передний план (в onResume()), предоставляя ссылку на себя, свой класс, какой-то произвольный ID и т.д.

Ссылка: http://developer.android.com/reference/android/app/Activity.html


Редактировать:

Вы можете получить доступ к идентификатору верхней Activity через ActivityManager -> запущенные задачи -> ComponentName. Обязательно объявите в вашем манифесте.

Context context = someArbitraryContext;
ActivityManager am = (ActivityManager) context.
    getSystemService(Activity.ACTIVITY_SERVICE);
String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();
String className = am.getRunningTasks(1).get(0).topActivity.getClassName();

Что касается получения уведомления, вам, вероятно, придется просто проверять верхнюю Activity каждые x миллисекунд.

22
ответ дан 3 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: