Показывать активность только один раз при нажатии на значок уведомления - PullRequest
0 голосов
/ 25 февраля 2012

У меня есть приложение, которое предупреждает пользователя какими-то напоминаниями. Эти напоминания отображаются как уведомления. Когда пользователь нажимает на любое из этих уведомлений, оно должно отображать дополнительную информацию об этом сигнале тревоги. Это делается в основном путем вызова действия с определенным параметром.

Вот что я делаю:

NotificationManager mNotificationManager = (NotificationManager) MyApplication.getContext().getSystemService(Context.NOTIFICATION_SERVICE);                 
Notification notification = new Notification(R.drawable.reminder2, reminder.Title, System.currentTimeMillis());

Intent notificationIntent = null;
notificationIntent = new Intent(MyApplication.getContext(), ReminderActivity.class);
notificationIntent.putExtra("idnotification", reminder.ID);


PendingIntent contentIntent = PendingIntent.getActivity(MyApplication.getContext(), reminder.ID, notificationIntent, 0 );

notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
notification.defaults |= Notification.DEFAULT_LIGHTS;
notification.defaults |= Notification.FLAG_INSISTENT;


notification.setLatestEventInfo(MyApplication.getContext(), "Reminder", reminder.Title, contentIntent);

mNotificationManager.notify(reminder.ID, notification);

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

Я попытался установить флаги для PendingIntent, но безуспешно. Я пытался с FLAG_CANCEL_CURRENT, FLAG_NO_CREATE, FLAG_ONE_SHOT, FLAG_UPDATE_CURRENT. Единственное, что близко к тому, что мне нужно, это FLAG_ONE_SHOT, но второй раз, когда я нажимаю на него, активность не отображается.

Что еще я могу попробовать? Я полностью исчерпал идеи здесь. Спасибо

1 Ответ

1 голос
/ 25 февраля 2012

В Manifest установите launchMode для этого Activity на singleTop.Если это не сработает, попробуйте singleInstance.Я думаю, что один из них может быть более применим к вам.

Если это не сработает, попробуйте поиграть с некоторыми флагами для Intent:

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)

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

FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
FLAG_ACTIVITY_CLEAR_TASK
FLAG_ACTIVITY_NEW_TASK (in conjunction with others)

Вы можете увидеть более подробную информацию здесь по всем флагам (в разделе СводкаКонстанты ... а затем все флаги, которые начинаются с FLAG_ACTIVITY).Если мои предложения не сработают, я думаю, что вы все равно найдете ответ в документации.

...