2012-05-23 3 views
9

У меня есть код, который создает некоторые уведомления, это действительно базовый.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 все работает отлично, за исключением того, что действие «Салфетка к офису» не работает. Уведомление идет немного в сторону, затем вставляет и отскакивает назад. Любая идея? Спасибо.

+0

попробовать удалить FLAG_AUTO_CANCEL –

+0

@Copa уже пытались – James

+0

Мн ... попытаться присвоить первый флаг ntofication.flags и не побитовому или первый флаг. Измените notification.flags | = DEFAULT_SOUND на notification.flags = Notification.DEFAULT_SOUND; Может быть, это поможет –

ответ

12

Вы не можете удалить свое уведомление, потому что оно находится в состоянии «ONGOING».

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

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

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

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

И теперь причина, по которой это продолжалось?

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

Notification.DEFAULT_VIBRATE и Notification.FLAG_ONGOING_EVENT имеют одинаковое значение Contant .

+0

Это было именно то, что мне нужно было знать. Спасибо! – joshplusa

+0

Запущен с помощью setOngoing (false) и notification.flags | = Notification.FLAG_AUTO_CANCEL. –

0

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

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

Вы должны использовать setOngoing (boolean ongoing)

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

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

.setOngoing(false);