Android: как избежать, чтобы нажатие на Уведомление вызывало onCreate () - PullRequest
16 голосов
/ 31 июля 2010

В моем приложении я уведомляю пользователя уведомлениями, если происходит что-то особенное:

public void triggerNotification(String msg) {
        notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        Intent contentIntent = new Intent(this, ABC.class);
        Notification notification = new Notification(R.drawable.icon, msg, System.currentTimeMillis());
        notification.setLatestEventInfo(this, "ABC", msg, PendingIntent.getActivity(this.getBaseContext(), 0, contentIntent, PendingIntent.FLAG_CANCEL_CURRENT));
        notification.flags = Notification.FLAG_AUTO_CANCEL;
        notificationManager.notify(notificationCounter, notification);
        notificationCounter++;
}

Если пользователь нажимает на уведомление, вызывается метод onCreate (). Но я хочу, чтобы в моем приложении вызывался определенный метод или, если приложение не на переднем плане, чтобы он возвращался на передний план.

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

Ответы [ 3 ]

15 голосов
/ 31 июля 2010

Чтобы вывести ваше приложение на передний план, если оно уже запущено, вам нужно установить различные флаги для вашего намерения:

contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

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

6 голосов
/ 04 февраля 2013

Рекомендация использовать FLAG_ACTIVITY_CLEAR_TOP и FLAG_ACTIVITY_SINGLE_TOP только частично решает проблему.Для действия в манифесте Android также должны быть применены эти настройки, чтобы запуск действия с домашнего экрана выполнялся аналогично.Без этих свойств можно запустить несколько экземпляров действия.

<activity android:name="foo"
          android:clearTaskOnLaunch="true"
          android:launchMode="singleTop"
          android:label="@string/app_name">
0 голосов
/ 01 января 2017

Я обнаружил, что если вы используете Intent contentIntent = new Intent(this, ABC.class);, это вызывает onCreate(); независимо от установленных флагов.

Используйте Intent contentIntent = getIntent();, чтобы пропустить onCreate();, и это переместится на onStart();

...