Запуск приложения из панели уведомлений Android.Как запустить новый экземпляр приложения, а не возобновить фоновый процесс? - PullRequest
1 голос
/ 05 декабря 2011

Мне удалось получить уведомление от нашего приложения, чтобы оно появлялось на панели уведомлений в верхней части экрана всякий раз, когда оно получает толчок. Мое приложение представляет собой иерархию взглядов. У меня есть мой главный экран со списком. При щелчке по одному из этих элементов списка просмотра открывается экран сводки (также содержащий вид списка), а при щелчке по одному из элементов списка обзора экрана открывается экран сведений (последний экран в иерархии). Пользователь может нажать кнопку «Назад», чтобы вернуться вверх по иерархии на главный экран (или домашний экран).

Теперь мое приложение и большинство приложений в этом отношении, как правило, работают в фоновом режиме, пока кнопка «Назад» не будет нажата достаточно раз. Я установил свое Уведомление для запуска экземпляра mainScreen при его нажатии. Дело в том, что если приложение уже запущено, и я делаю это, оно создает еще один главный экран поверх всех других экранов, поэтому, когда пользователь нажимает кнопку «Назад» на главном экране (ожидая выхода из приложения), он возвращается чтобы какой-либо экран был активным, когда он оставил мое приложение работающим в фоновом режиме.

Итак, я мог бы вернуться к иерархии следующим образом: главный экран -> подробный экран -> суммарный экран -> основной экран -> ВЫХОД

Есть ли способ, как я могу просто убить приложение и запустить новый экземпляр, когда пользователь щелкает мое уведомление? Как обычно обрабатываются эти клики уведомлений?

Надеюсь, это имеет смысл.

Спасибо.

(Edtied: все получилось, как и ожидалось, за исключением одной проблемы. Я был не совсем честен, когда сказал, что detailsScreen (activityB в вашем примере) был последним в иерархии. На этом экране у пользователя фактически есть опция для просмотра карты

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, 
                Uri.parse("geo:0,0?q=" + depLatitude + "," + depLongitude + "(" + name + ")"));
                startActivity(intent);

Когда я нажимаю обратно на карту, идеальная ситуация для нее - вернуться на подробный экран, но в этом случае он возвращается обратно на главный экран.

Есть идеи? )

1 Ответ

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

Вы можете использовать Reorder для атрибута front и получить тот же экземпляр mainScreen наверх.Для уничтожения действий, которые вам не нужны, как только они уходят в фоновом режиме, используйте атрибут noHistory

MainActivity → Activity A → Activity B → Activity A

Запустить действие A из MainActivity

Intent intentA = new Intent(MainActivity.this, ActivityA.class);
startActivity(intentA);

В этом кодеФрагмент, который мы запускаем в стандартном режиме. Действие A.

Запуск действия B из действия A

Операция B запускается с флагом намерения: Intent.FLAG_ACTIVITY_REORDER_TO_FRONT из действия A

Intent intentB = new Intent(ActivityA.this, ActivityB.class);
intentB.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intentB);

Запуск операции A из операции B

Когда операция A запускается из операции B, предыдущий экземпляр операции переупорядочивается на передний план вместо созданияновый

Intent intentA = new Intent(MainActivity.this, ActivityA.class);
startActivity(intentA);

Нет истории

<activity android:noHistory="true" ../>

Должно ли действие быть удалено из стека действий и завершено (вызван его метод finish ())когда пользователь отходит от него и его больше не видно на экране - «истина», если он должен быть завершен, и «ложь», если нет.Значение по умолчанию неверно".Значение «истина» означает, что действие не оставит исторического следа.Он не останется в стеке действий для задачи, поэтому пользователь не сможет вернуться к нему.

...