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(). Но я хочу, чтобы в моем приложении вызывался определенный метод, или, если приложение не на переднем плане, чтобы он возвращался на передний план.
Я знаю, что есть много учебных пособий, которые объясняют, как обрабатывать уведомления, но я просто не понимаю их полностью и не смог реализовать то, что хотел бы.
3 ответа
Чтобы вывести ваше приложение на передний план, если оно уже запущено, вам нужно установить различные флаги для вашего намерения:
contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
Для запуска определенного метода вы можете просто передать дополнительную информацию вместе с намерением и интерпретировать ее в своем приложении, чтобы решить, какой метод запустить.
Рекомендация использовать FLAG_ACTIVITY_CLEAR_TOP и FLAG_ACTIVITY_SINGLE_TOP только частично решает проблему. Для действия в манифесте Android также должны быть применены эти настройки, чтобы запуск действия с домашнего экрана выполнялся аналогично. Без этих свойств можно запустить несколько экземпляров действия.
<activity android:name="foo"
android:clearTaskOnLaunch="true"
android:launchMode="singleTop"
android:label="@string/app_name">
Я обнаружил, что если вы используете Intent contentIntent = new Intent(this, ABC.class);
это звонки onCreate();
независимо от установленных флагов.
использование Intent contentIntent = getIntent();
Пропустить onCreate();
и это движется к onStart();