Подтвердить что ты не робот

Android: как избежать этого нажатия на вызовы уведомлений onCreate()

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

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(). Но я хочу, чтобы был вызван конкретный метод в моем приложении, или если приложение не находится на переднем плане, оно возвращается на передний план.

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

<activity android:name="foo"
          android:clearTaskOnLaunch="true"
          android:launchMode="singleTop"
          android:label="@string/app_name">

Ответ 3

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

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