Уведомление о 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 для эмулятора api21 (не для предварительного просмотра)
Пробовал андроид: Theme.Holo.NoActionBar и андроид: Theme.Holo.NoActionBar.Fullscreen
И NotificationCompat.Builder
Примеры Sdk недоступны. кто-нибудь знает, как это сделать?
Я сделал это, добавив
.setDefaults(Notification.DEFAULT_VIBRATE)
- лучший способ?
Ответы
Ответ 1
В соответствии с Notifications вам необходимо установить виброзвонок или мелодию звонка, чтобы выполнить Heads-up. Тем не менее, здесь быстрый хак, который не требует разрешения VIBRATE для получения заголовка уведомления:
notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
if (Build.VERSION.SDK_INT >= 21) notificationBuilder.setVibrate(new long[0]);
EDIT:
Не злоупотребляйте уведомлением о хедз-ап. См. здесь для использования уведомления хедз-ап:
MAX: для критических и срочных уведомлений, которые предупреждают пользователя о том, что это критическое по времени или необходимо разрешить, прежде чем они смогут продолжить выполнение определенной задачи.
HIGH: прежде всего для важных сообщений, таких как сообщения или чат-события с содержанием, которое особенно интересно для пользователя. Высокоприоритетные уведомления вызывают отображение уведомлений о хедз-ап.
Ответ 2
Согласно Google:
https://developer.android.com/design/patterns/notifications.html
Если приоритет уведомления отмечен как высокий, максимальный или полный экран, он получает уведомление о хед-ап.
Таким образом, следующий код должен генерировать уведомление о хедз-ап:
.setPriority(Notification.PRIORITY_MAX)
Должно быть достаточно. Но, видимо, также необходимо установить .setDefaults(Notification.DEFAULT_VIBRATE). Надеюсь, Google исправит это в своей последней версии Android 5.0.
Не уверен, что ошибка или функция...
Ответ 3
Все мои приложения не показывают Notification, например, у меня есть Nexus 6 с Android 5.1.1, но я думаю, что это с тех пор, как Android 5.0, мне пришлось установить:
.setPriority(Notification.PRIORITY_HIGH)
Правильно установить приоритет уведомлений и управлять им.
Android поддерживает флаг приоритета для уведомлений. Этот флаг позволяет вам влиять на то, где появляется ваше уведомление, относительно других уведомлений, и помогает убедиться, что пользователи всегда видят свои самые важные уведомления. При отправке уведомления вы можете выбрать один из следующих уровней приоритета:
MAX
Используйте для критических и срочных уведомлений, которые предупреждают пользователя о том, что это критически важно или необходимо решить, прежде чем они смогут продолжить выполнение определенной задачи.
ВЫСОКИЙ
Используйте прежде всего важные сообщения, такие как сообщения или чаты, с содержанием, которое особенно интересно для пользователя. Высокоприоритетные уведомления вызывают отображение уведомлений о хедз-ап.
DEFAULT
Используйте для всех уведомлений, которые не попадают ни в один из других приоритетов, описанных здесь, и если приложение не уделяет приоритетное внимание своим собственным уведомлениям
LOW
Используйте для уведомлений о том, что вы хотите, чтобы пользователь был проинформирован, но это менее актуально. Низкоприоритетные уведомления, как правило, отображаются в нижней части списка, что делает их хорошим выбором для таких вещей, как публичные или неориентированные социальные обновления. Пользователь попросил сообщить о них, но эти уведомления никогда не должны иметь приоритет над срочными или прямая связь.
MIN
Используйте для контекстной или справочной информации, такой как информация о погоде или информация о контекстном местоположении. Уведомления о минимальном приоритете не отображаются в строке состояния. Пользователь обнаруживает их при расширении оттенка уведомления.
Ответ 4
Чтобы установить priority, используйте setPriority (введена в API 16) наряду с setDefaults (добавлено в API 11) Notification Builder. Выберите приоритет DEFAULT, HIGH, LOW, MAX, MIN в соответствии с требованиями вашего приложения. По умолчанию также можно выбрать здесь.
Небольшой фрагмент:
notification = NotificationBuilder(service)
notification.setPriority(Notification.PRIORITY_MAX)
notification.setDefaults(Notification.DEFAULT_ALL)
Ответ 5
Необходимо установить высокий приоритет и использовать рингтоны или вибрации.
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) или
- Уведомление имеет высокий приоритет и использует мелодии звонка или вибрации
Ответ 6
Добавьте эту строку в свой код, чтобы отобразить уведомление о начале работы, только для версии Lollipop
notificationBuilder.setPriority(Notification.PRIORITY_HIGH);