Android - launchMode = SingleTask и уведомления? - PullRequest
4 голосов
/ 20 марта 2011

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

Насколько я понимаю, если для вашего основного вида деятельности (назовем его A) launchMode установлено значение singleTask, и A инициирует действие B, то нажатие кнопки «Домой» разрушит стек истории, а перезапуск приложения приведет к обратно к А, а не к Б.

У меня для launchMode установлено значение singleTask, потому что у меня есть постоянное уведомление, и я не хочу, чтобы несколько экземпляров основного действия появлялись всякий раз, когда пользователь нажимает на уведомление.

Есть ли что-то, чего мне не хватает, что позволило бы мне удовлетворить оба?

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

Если я изменяю launchMode на singleTop, он работает, но я получаю несколько экземпляров основного действия всякий раз, когда запускаю его.

Спасибо

Andreas

Ответы [ 4 ]

3 голосов
/ 09 марта 2012

Я использую следующий код, чтобы избежать нескольких случаев действия

Intent intent=new Intent(this,RICO.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);

Изменение манифеста мне не подходит

1 голос
/ 23 марта 2011

Вы пытались установить launchMode в singleTop для всех действий в вашем приложении? Потому что я получил из вашего запроса то, что основное действие не является singleTop, так что это может привести к вызову другого экземпляра основного действия, как только основное действие будет запущено из действия, которое было запущено из действия уведомления.

Или вы можете указать launchMode как атрибут самого тега приложения в манифесте.

0 голосов
/ 23 июля 2012

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

Intent intent= new Intent(this, YaampActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

, используя эти параметры

android:launchMode="singleTask"
android:taskAffinity=""
android:excludeFromRecents="true"

внутри элемента.

Теперь у меня есть уведомление, которое порождает основное действие (если это действие еще не находится на переднем плане), и его поведение корректно, даже если действие «закрывается» нажатием кнопки «Домой» и / или кнопки «Назад».

0 голосов
/ 20 июля 2012

У меня проблемы с обоими подходами.Уведомление работает безупречно только в следующих условиях: - с помощью кнопки «Назад» в основном действии (с историей, содержащей только это действие) - без использования кнопки «Домой» - не с использованием уведомления, ЕСЛИ вызываемое вами действие находится сверху и активно

В любом другом случае уведомление больше не может вызывать на переднем плане действие с помощью «new Intent (...)»

...