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