Android 4: нельзя отклонить уведомление, проводя

У меня есть код, который создает некоторые уведомления, это действительно просто.

int icon = R.drawable.notification;
CharSequence tickerText = "Text";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);

Context context = getApplicationContext();
CharSequence contentTitle = "Text";
CharSequence contentText = "Text";
Intent notificationIntent = new Intent(this, RequestActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notification.flags |= Notification.DEFAULT_SOUND;
notification.flags |= Notification.DEFAULT_VIBRATE;
notification.flags |= Notification.DEFAULT_LIGHTS;
notification.flags |= Notification.FLAG_AUTO_CANCEL;

mNotificationManager.notify(notificationID, notification);

В 2.1 все отлично работает. В 4.0 все работает нормально, за исключением того, что действие «смахивание с разрыва» не работает. Уведомление идет немного в сторону, затем прилипает и отскакивает назад. Есть идеи? Благодарность

 Basic Coder23 мая 2012 г., 12:47
Постарайтесь удалить FLAG_AUTO_CANCEL
 James23 мая 2012 г., 15:20
@ Копа Нет, не помогло
 Basic Coder25 мая 2012 г., 10:14
Кажется, это действительно странная проблема. Извините, я думаю, что не могу помочь вам решить:
 Basic Coder23 мая 2012 г., 12:59
mh ... попробуйте назначить первый флаг ntofication.flags, а не побитовый или первый флаг. Измените messages.flags | = DEFAULT_SOUND на уведомление.flags = Notification.DEFAULT_SOUND; Может быть, это поможет
 James23 мая 2012 г., 12:52
@ Копа уже пробовал

Ответы на вопрос(3)

setOngoing (логическое значение продолжается)

Укажите, является ли это "текущим" уведомлением. Пользователь не может отклонить текущие уведомления, поэтому ваше приложение или служба должны позаботиться об их отмене. Они обычно используются для указания фоновой задачи, с которой пользователь активно вовлечен (например, играет музыка) или ожидает какой-либо путь и, следовательно, занимает устройство (например, загрузка файла, операция синхронизации, активное сетевое соединение).

Вы можете использоват

.setOngoing(false);

потому что оно находится в «НАСТОЯЩЕМ» состоянии.

Первое решение:

Замените установочные флаги следующим кодом:

notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
notification.defaults |= Notification.DEFAULT_LIGHTS;
notification.flags |= Notification.FLAG_AUTO_CANCEL;

Defaults для секции по умолчанию, флаги для секции флагов.

А теперь, почему это происходит?

Как вы уже знаете, флаги (и значения по умолчанию) для уведомлений устанавливаются с помощью битовая операция. Означает, что каждый флаг имеет постоянное значение, равное степени 2. Добавление их приводит к уникальному номеру для набора флагов, что позволяет очень быстро вычислить, какие флаги действительно установлены.

Notification.DEFAULT_VIBRATE а также Notification.FLAG_ONGOING_EVENT имеют одинаковое значение константы2.

 joschplusa25 окт. 2013 г., 09:52
Это именно то, что мне нужно было знать. Благодарность
 Rahul Rastogi11 нояб. 2017 г., 14:12
Начал показывать с setOngoing (false) и Notification.flags | = Notification.FLAG_AUTO_CANCEL.

Просто вставьте эту строку при уведомлении ...

// Will show lights and make the notification disappear when the presses it
notification.flags == Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;

Ваш ответ на вопрос