Запустите действие B из уведомления и нажмите кнопку «Назад», чтобы запустить действие A - PullRequest
4 голосов
/ 07 декабря 2011

У меня есть приложение Android, которое содержит два Activities.

Activity A, имеет кнопку, которая запускает Activity B с использованием Context.startActivity(Intent intent).

. Также имеется Notificationкоторый открывает Activity таким же образом.

Если я запускаю B из этого уведомления и нажимаю кнопку возврата - он просто закрывает B и не показывает A, как я иду туда с обычным регистром.

Можно ли заставить B возвратиться к A, если он запущен из уведомления без стека истории?

Решение

Как stefan и Пол Ламмерцма упомянул, что лучший способ - начать A с уведомления и в A создать новое намерение с B - но не в onCreate()!

Я немного покопался в этом и обнаружил, что если я установлю в AndroidManifest новое свойство для A активности:

android:launchMode="singleTask"

будет A действие, называемое

onNewIntent(Intent intent)

И там мы должны проверить, если Intent содержит дополнительное значение, переданное из уведомления - и если это так, то мы вызываем new Bнамерение.

Спасибо вам обоим и удачи вам в следующих разработках; -)

Ответы [ 3 ]

4 голосов
/ 07 декабря 2011

Я бы предложил, чтобы уведомление вызывало действие A (вместо B напрямую) с некоторым флагом в его пакете дополнительных функций.В A's onCreate() проверьте флаг и немедленно запустите Activity B. Это гарантирует, что нажатие на B вернет к A.

3 голосов
/ 07 декабря 2011

Простой способ добиться этого - начать действие A с вашего уведомления с флагом, позволяющим мгновенно вызвать действие B.

Так что вам просто нужно добавить дополнительное к своему намерению, которое вы начинаете в своемУведомление, и вы должны проверить в Деятельности A, если это дополнительное существует, и если оно существует, тогда вы запускаете Упражнение B.

Обновление: другой способ, но, на мой взгляд, не очень хороший, будет переопределять onPause ()метод вашей деятельности B и вызовите там деятельность A.

1 голос
/ 07 декабря 2011

Возможно, не самое красивое решение, но, тем не менее, быстрое;добавьте логическое значение к намерению запуска B , "launchFromNotification" или что-то подобное.
В действии Bs onCreate () вы сохраняете это логическое значение для дальнейшего использования.) вы можете проверить значение вашего логического значения и, если оно истинно, запустить действие A перед вызовом finish ();

Более привлекательным решением может быть запуск операции A из уведомления с дополнительным указанием непосредственно запускать действиеB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...