У меня есть сервис, и его поведение должно измениться, когда самое верхнее Действие изменяется. Скажите, Действие A активно, и затем сервис запускает некоторую обработку. Эта обработка должна остановиться, когда Действие A больше не видимо: пользователь оттеснил, "Home" или сделал что-либо еще, что делает Действие невидимой операцией. Это Действие Необходимость не знать о сервисе - т.е. этому не, должно быть, придется явно сообщить Сервису, что это уходит.
В ореховой скорлупе, там путь к:
P.S. Это может походить на вредоносное поведение, но это не! Это - законный пример использования!
Править: Операции не находятся в моем приложении. Они могут быть примерно чем-либо - браузер, приложение карт, настройки, и т.д.
Эта верхняя часть устарела. См. ответ в нижней части.
Я предполагаю, что вы имеете в виду 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 миллисекунд.