it-swarm.com.ru

Heads-Up Notification - 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)

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

43
user1719863

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

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

Правка:

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

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

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

77
Mygod

По данным Google: https://developer.Android.com/design/patterns/notifications.html

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

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

.setPriority(Notification.PRIORITY_MAX)

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

Не уверен, если ошибка или функция ...

15
MLS

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

.setPriority(Notification.PRIORITY_HIGH)

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

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

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

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

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

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

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

7
Elenasys

Чтобы установить priority , используйте функцию setPriority (введено в API 16) вместе с setDefaults (добавлено в API 11) из Notification Builder . Выберите приоритет ПО УМОЛЧАНИЮ , ВЫСОКИЙ, НИЗКИЙ, МАКС., МИН. В соответствии с требованиями вашего приложения. Также можно выбрать значения по умолчанию здесь .

Небольшой фрагмент:

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

Следует установить высокий приоритет и использовать мелодии или вибрации.

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), или 
  • Уведомление имеет высокий приоритет и использует мелодии или вибрации
1
situee

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

new NotificationChannel("ID", "Channel Name", NotificationManager.IMPORTANCE_HIGH);
0
Megaetron

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

notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
0
Amit Desale

Вам не нужно устанавливать вибрации. Вам нужно только установить звук. Это менее навязчиво. У меня нет звука, но уведомление отображается сверху. Убедитесь, что вы используете PRIORITY_HIGH и DEFAULT_SOUND.

 NotificationChannel channel = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            channel = new NotificationChannel("my_channel_01",
                    "Channel human readable title",
                    NotificationManager.IMPORTANCE_HIGH);
            mNotificationManager.createNotificationChannel(channel);
        }


        Notification notification =
                new NotificationCompat.Builder(this, "notify_001")
                        .setSmallIcon(R.drawable.ic_check)
                        .setContentTitle("My notification")
                        .setContentText("Hello World!")
                        .setPriority(Notification.PRIORITY_HIGH)
                        .setDefaults(NotificationCompat.DEFAULT_SOUND)
                        .setChannelId("my_channel_01").build();


        mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(0, notification);
0
live-love