Предварително известие - 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)

това ли е най-добрият начин?


person user1719863    schedule 19.10.2014    source източник
comment
ако това работи за вас, тогава трябва да го добавите като отговор.   -  person ProllyGeek    schedule 09.12.2014
comment
Моля, имайте предвид, че предупредителните известия могат да бъдат ИЗКЛЮЧИТЕЛНО досадни, докато гледате медии или използвате всяко приложение - не е изненадващо, че почти всяко приложение използва горната част на екрана. Те хвърлят сянка върху горната трета на екрана (тествано на моя 8 Tegra Shield). Ако ТРЯБВА да използвате тези (небесата знае защо), поне направете опция за деактивирането им в приложението си, моля!   -  person    schedule 21.02.2015
comment
@user1499731 Android има собствена поддръжка за деактивиране на надникването на известия за приложение IIRC.   -  person Mygod    schedule 06.03.2016
comment
setDefaults(Notification.DEFAULT_VIBRATE) работи   -  person Kit    schedule 18.10.2017
comment
Публикувах кратка информация относно показването на хедс-ъп известие на medium.com/@md.noor.asad/   -  person Asad    schedule 26.02.2019
comment
Можете също да последвате моя отговор stackoverflow.com/a/54890459/4932661   -  person Asad    schedule 26.02.2019


Отговори (9)


Според Известия трябва да зададете вибриране или мелодия, за да работи Heads-up. Ето обаче един бърз хак, който не изисква разрешение за VIBRATE, за да създаде известие в главата:

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

РЕДАКТИРАНЕ:

Не злоупотребявайте с предупредителните известия. Вижте тук за това кога да използвате предизвестие:

МАКС.: За критични и спешни известия, които предупреждават потребителя за състояние, което е критично във времето или трябва да бъде разрешено, преди да може да продължи с определена задача.

ВИСОКА: Основно за важна комуникация, като съобщения или чат събития със съдържание, което е особено интересно за потребителя. Уведомленията с висок приоритет задействат показването на известия в главата.

person Mygod    schedule 21.12.2014
comment
Това не е вярно - наскоро получих доклад за срив за SecurityException на устройство Samsung Android 4, използвайки този метод - person Daiwik Daarun; 01.01.2016
comment
@DaiwikDaarun Хвърлено ли е от setVibrate? Ако може да се възпроизведе само на Android 4.x, можем да добавим проверка на версията по време на изпълнение. - person Mygod; 01.01.2016

Според Google: https://developer.android.com/design/patterns/notifications.html

Ако приоритетът на известие е маркиран като висок, максимален или на цял екран, той получава предупредително известие.

Така че следният код трябва да генерира предизвестие:

.setPriority(Notification.PRIORITY_MAX)

Би трябвало да е достатъчно. Но очевидно .setDefaults(Notification.DEFAULT_VIBRATE) също трябва да бъде зададен. Надяваме се, че Google ще поправи това в последната си версия на Android 5.0.

Не съм сигурен дали грешка или функция...

person MLS    schedule 22.10.2014
comment
Notification.PRIORITY_HIGH е достатъчно високо, не е нужно (и вероятно не трябва) да задавате PRIORITY_MAX само защото искате вашите известия да се показват като хедс-ъп. - person Marcel Bro; 27.11.2014
comment
Изглежда, че или звук и/или вибриране трябва да бъдат зададени на известието, за да се показва като heads up. Това всъщност има смисъл, тъй като би било странно да се види безшумно известие, а в противен случай може да не е очевидно, че това е системно известие. - person Steven Byle; 12.12.2014
comment
В Android M вече е възможно да деактивирате предупредителните известия/надничане за всяко приложение. Така че, ако това надничане е деактивирано, каквото и да правите, предупредителните ви известия няма да се показват. Имайте това предвид. - person MLS; 17.06.2015
comment
Въпреки че е лошо документиран, той е тук: developer. android.com/guide/topics/ui/notifiers/ The notification has high priority **and** uses ringtones or vibrations - person boltup_im_coding; 07.01.2016

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

.setPriority(Notification.PRIORITY_HIGH)

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

Android поддържа приоритетен флаг за известия. Този флаг ви позволява да повлияете къде да се показва вашето известие спрямо други известия и помага да се гарантира, че потребителите винаги виждат най-важните си известия първи. Можете да избирате от следните нива на приоритет, когато публикувате известие:

MAX Използвайте за критични и спешни известия, които предупреждават потребителя за състояние, което е критично във времето или трябва да бъде разрешено, преди да може да продължи с определена задача.

ВИСОКА Използвайте предимно за важна комуникация, като съобщения или чат събития със съдържание, което е особено интересно за потребителя. Уведомленията с висок приоритет задействат показването на известия в главата.

ПО ПОДРАЗБИРАНЕ Използвайте за всички известия, които не попадат в никой от другите приоритети, описани тук, и ако приложението не приоритизира собствените си известия

НИСКО Използвайте за известия, за които искате потребителят да бъде информиран, но които не са толкова спешни. Известията с нисък приоритет обикновено се показват в долната част на списъка, което ги прави добър избор за неща като публични или ненасочени социални актуализации: Потребителят е поискал да бъде уведомен за тях, но тези известия никога не трябва да имат предимство пред спешните или директна комуникация.

MIN Използвайте за контекстна или основна информация, като информация за времето или контекстна информация за местоположение. Известията с минимален приоритет не се показват в лентата на състоянието. Потребителят ги открива при разширяване на панела за известия.

person Jorgesys    schedule 21.09.2015

За да зададете приоритет, използвайте setPriority функция (въведена в API 16) заедно с setDefaults (добавен в API 11) на Конструктор на известия. Изберете приоритета DEFAULT, HIGH, LOW, MAX, MIN като според изискванията на вашето приложение. Настройките по подразбиране също могат да бъдат избрани тук.

Малък откъс:

notification = NotificationBuilder(service)
notification.setPriority(Notification.PRIORITY_MAX)
notification.setDefaults(Notification.DEFAULT_ALL)
person unixia    schedule 04.01.2017

Моля, проверете дали телефонът ви не е в режим „безшумен“ или „не безпокойте“. Прекарах един ден, преди да го намеря. Просто оставям този коментар за тези, които получават същия проблем и са намерили този въпрос.

person Zeon    schedule 25.06.2020
comment
Благодаря! Бог да те благослови - person Martin De Simone; 23.10.2020

Трябва да зададете висок приоритет и да използвате мелодии или вибрации.

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

Справка: https://developer.android.com/guide/topics/ui/notifiers/notifications.html#Heads-up

Предварителни известия

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

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

  • Дейността на потребителя е в режим на цял екран (приложението използва fullScreenIntent), или
  • Известието е с висок приоритет и използва мелодии или вибрации
person situee    schedule 19.07.2017

Добавете този ред в кода си, за да покажете предизвестие, че работи само за версия Lollipop

notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
person Amit Desale    schedule 10.08.2016

За устройства, работещи с Android 8.0 (API ниво 26) и по-високо, каналът за уведомяване изисква висока важност

new NotificationChannel("ID", "Channel Name", NotificationManager.IMPORTANCE_HIGH);
person Megaetron    schedule 14.03.2018

Не е необходимо да настройвате вибриране. Трябва само да зададете звук. По-малко натрапчиво е. Не получавам никакъв звук на моя, но известието се показва отгоре. Уверете се, че използвате 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);
person live-love    schedule 24.11.2018