Уведомление о Heads-Up – Android Lollipop

Я пытаюсь показать хедз-ап типа уведомления, но я не мог. Что я пробовал

final Notification.Builder notif = new Builder(getApplicationContext()) .setContentTitle(getString(R.string.title)) .setContentText(getString(R.string.text)) // .setTicker(getString(R.string.tick)) removed, seems to not show at all // .setWhen(System.currentTimeMillis()) removed, match default // .setContentIntent(contentIntent) removed, I don't neet it .setColor(Color.parseColor(getString(R.color.yellow))) //ok .setSmallIcon(R.drawable.ic_small) //ok .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)) // .setCategory(Notification.CATEGORY_CALL) does not seem to make a difference .setPriority(Notification.PRIORITY_MAX); //does not seem to make a difference // .setVisibility(Notification.VISIBILITY_PRIVATE); //does not seem to make a difference mNotificationManager.notify(Constants.NOTIFICATION_ID, notif.build()); 

Уведомление отображается только как значок на панели. Я использую API 21 для эмулятора API 21 (не предварительный просмотр L) Я попытался:
android:Theme.Holo.NoActionBar ,
android:Theme.Holo.NoActionBar.Fullscreen
и NotificationCompat.Builder

Примеры SDK недоступны. Кто-нибудь знает как это делать?

Я сделал это, добавив:

 .setDefaults(Notification.DEFAULT_VIBRATE) 

это лучший способ?

Согласно Уведомлениям , вы должны установить виброзвонок или мелодию звонка, чтобы выполнить Heads-up. Тем не менее, вот быстрый взломать, который не требует разрешения VIBRATE для получения заголовка:

 notificationBuilder.setPriority(Notification.PRIORITY_HIGH); if (Build.VERSION.SDK_INT >= 21) notificationBuilder.setVibrate(new long[0]); 

РЕДАКТИРОВАТЬ:

Не злоупотребляйте уведомлением о хедз-ап. См. Здесь, когда следует использовать хедз-ап уведомление:

MAX: для критических и срочных уведомлений, которые предупреждают пользователя о том, что это критически важно или необходимо решить, прежде чем они смогут продолжить выполнение определенной задачи.

ВЫСОКАЯ: прежде всего для важных сообщений, таких как сообщения или чат-события с содержанием, которое особенно интересно для пользователя. Высокоприоритетные уведомления вызывают отображение уведомлений о хедз-ап.

Согласно Google: https://developer.android.com/design/patterns/notifications.html

Если приоритет уведомления отмечен как Высокий, Макс. Или полный экран, он получает уведомление хедз-ап.

Поэтому следующий код должен генерировать уведомление хедз-ап:

 .setPriority(Notification.PRIORITY_MAX) 

Должно быть достаточно. Но, видимо, также необходимо установить .setDefaults (Notification.DEFAULT_VIBRATE). Надеюсь, Google исправит это в своей последней версии Android 5.0.

Не уверен, что ошибка или функция …

Все мои приложения не показывают Notification, например, у меня есть Nexus 6 с Android 5.1.1, но я думаю, что это происходит с Android 5.0, мне пришлось установить:

 .setPriority(Notification.PRIORITY_HIGH) 

Правильно установить приоритет уведомлений и управлять им

Android поддерживает флаг приоритета для уведомлений. Этот флаг позволяет вам влиять на то, где появляется ваше уведомление, относительно других уведомлений, и помогает убедиться, что пользователи всегда видят свои самые важные уведомления. При отправке уведомления вы можете выбрать один из следующих уровней приоритета:

MAX Используйте для критических и срочных уведомлений, которые предупреждают пользователя о том, что это критическое по времени или необходимо решить, прежде чем они смогут продолжить выполнение определенной задачи.

HIGH Используется в основном для важных сообщений, таких как сообщения или события чата с содержанием, которое особенно интересно для пользователя. Высокоприоритетные уведомления вызывают отображение уведомлений о хедз-ап.

ПО УМОЛЧАНИЮ Используйте для всех уведомлений, которые не попадают ни в один из других приоритетов, описанных здесь, и если приложение не уделяет приоритетное внимание своим собственным уведомлениям

LOW Используйте для уведомлений, о которых вы хотите, чтобы информация о них была информирована, но это менее актуально. Низкоприоритетные уведомления, как правило, отображаются в нижней части списка, что делает их хорошим выбором для таких вещей, как публичные или неориентированные социальные обновления. Пользователь попросил сообщить о них, но эти уведомления никогда не должны иметь приоритет над срочными или прямой связи.

MIN Используйте для контекстной или справочной информации, такой как информация о погоде или информация о контекстном местоположении. Уведомления о минимальном приоритете не отображаются в строке состояния. Пользователь обнаруживает их при расширении оттенка уведомления.

Чтобы установить приоритет , используйте функцию setPriority (введенную в API 16) вместе с setDefaults (добавленный в API 11) Notification Builder . Выберите приоритет DEFAULT , HIGH, LOW, MAX, MIN в соответствии с требованиями вашего приложения. Здесь также могут быть выбраны значения по умолчанию.

Небольшой fragment:

 notification = NotificationBuilder(service) notification.setPriority(Notification.PRIORITY_MAX) notification.setDefaults(Notification.DEFAULT_ALL) 

Должен задавать высокий приоритет и использовать рингтоны или вибрации.

 notificationBuilder.setDefaults(Notification.DEFAULT_ALL); notificationBuilder.setPriority(Notification.PRIORITY_HIGH); 

Ссылка: https://developer.android.com/guide/topics/ui/notifiers/notifications.html#Heads-up

Уведомления о Heads-up

С Android 5.0 (уровень API 21) уведомления могут появляться в небольшом плавающем окне (также называемом уведомлением о хед-апе), когда устройство активно (то есть устройство разблокировано и его экран включен). Эти уведомления похожи на компактную форму вашего уведомления, за исключением того, что в уведомлении хедз-ап также отображаются кнопки действий. Пользователи могут действовать или отклонять уведомление о хедз-ап, не выходя из текущего приложения.

Примерами условий, которые могут вызывать уведомления о хедз-ап, являются:

  • Активность пользователя находится в полноэкранном режиме (приложение использует fullScreenIntent) или
  • Уведомление имеет высокий приоритет и использует рингтоны или вибрации

Добавьте эту строку в свой код, чтобы отобразить уведомление в виде заголовка, оно работает только для версии Lollipop

 notificationBuilder.setPriority(Notification.PRIORITY_HIGH); 

Для устройств под управлением Android 8.0 (API уровня 26) и выше канал уведомлений требует высокой важности

 new NotificationChannel("ID", "Channel Name", NotificationManager.IMPORTANCE_HIGH); 
Давайте будем гением компьютера.