web-dev-qa-db-fra.com

Notification Heads-up - Android Lollipop

J'essaie d'afficher un type de notification mais je ne pouvais pas. Ce que j'ai essayé

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());

La notification apparaît uniquement sous forme d’icône dans la barre . J'utilise API 21 sur un émulateur API 21 (et non un aperçu L).
Android:Theme.Holo.NoActionBar,
Android:Theme.Holo.NoActionBar.Fullscreen
et NotificationCompat.Builder 

Les exemples de SDK ne sont pas disponibles. est-ce que quelqu'un sait comment le faire?

Je l'ai fait fonctionner en ajoutant:

.setDefaults(Notification.DEFAULT_VIBRATE)

est-ce le meilleur moyen?

43
user1719863

Selon Notifications , vous devez définir un vibreur ou une sonnerie pour que le travail de Heads-up fonctionne. Cependant, voici un petit hack qui n'exige pas l'autorisation de VIBRATE pour produire une notification tête haute:

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

MODIFIER:

Ne pas abuser de la notification heads-up. Voir ici pour savoir quand utiliser la notification tête haute:

MAX: Pour les notifications critiques et urgentes qui alertent l'utilisateur sur une condition urgente ou devant être résolue avant de pouvoir poursuivre une tâche particulière.

HIGH: principalement pour les communications importantes, telles que les messages ou les événements de discussion avec un contenu particulièrement intéressant pour l'utilisateur. Les notifications de priorité élevée déclenchent l'affichage de la notification tête haute.

77
Mygod

Selon Google: https://developer.Android.com/design/patterns/notifications.html

Si la priorité d'une notification est marquée comme Haute, Max ou en plein écran, une notification est affichée.

Donc, le code suivant devrait générer une notification de heads-up:

.setPriority(Notification.PRIORITY_MAX)

Devrait suffire. Mais apparemment, le fichier .setDefaults (Notification.DEFAULT_VIBRATE) doit également être défini. Espérons que Google corrigera ce problème dans sa version finale d'Android 5.0. 

Pas sûr si un bug ou une fonctionnalité ...

15
MLS

Toutes mes applications ne montrent pas la notification, par exemple, j'ai un Nexus 6 avec Android 5.1.1, mais je pense que c'est un issuse depuis Android 5.0, je devais définir:

.setPriority(Notification.PRIORITY_HIGH)

Définir et gérer correctement la priorité de notification

Android prend en charge un indicateur de priorité pour les notifications. Cet indicateur vous permet d’influencer l’emplacement de votre notification par rapport à d’autres notifications et de garantir que les utilisateurs voient toujours en premier leurs notifications les plus importantes. Vous pouvez choisir parmi les niveaux de priorité suivants lors de la publication d'une notification:

MAXÀ utiliser pour les notifications critiques et urgentes qui alertent l'utilisateur sur une condition de délai critique ou devant être résolue avant ils peuvent continuer avec une tâche particulière.

ÉLEVÉÀ utiliser principalement pour les communications importantes, telles que les événements de messagerie ou de discussion avec un contenu particulièrement intéressant pour le utilisateur. Les notifications de priorité élevée déclenchent la notification tête haute afficher.

DEFAULTÀ utiliser pour toutes les notifications ne correspondant à aucune des autres priorités décrites ici et si l'application ne le fait pas hiérarchiser ses propres notifications

LOWÀ utiliser pour les notifications sur lesquelles vous souhaitez que l'utilisateur soit informé, mais qui sont moins urgentes. Les notifications de faible priorité ont tendance à apparaissent au bas de la liste, ce qui en fait un bon choix pour des choses comme les mises à jour sociales publiques ou non dirigées: l'utilisateur a demandé à être notifié à leur sujet, mais ces notifications ne devraient jamais prendre priorité sur la communication urgente ou directe.

MINÀ utiliser pour des informations contextuelles ou générales telles que des informations météorologiques ou des informations de localisation contextuelle. Priorité minimale les notifications n'apparaissent pas dans la barre d'état. L'utilisateur les découvre en élargissant la nuance de notification.

7
Elenasys

Pour définir priority , utilisez la fonction setPriority (introduite dans l'API 16) avec setDefaults (ajouté dans l'API 11) de Notification Builder . Choisissez la priorité PAR DÉFAUT , HAUT, BAS, MAX, MIN selon les besoins de votre application. Les valeurs par défaut peuvent également être choisies ici .

Un petit extrait:

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

Devrait définir une priorité élevée et utiliser des sonneries ou des vibrations.

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

Réf.: https://developer.Android.com/guide/topics/ui/notifiers/notifications.html#Heads-up

Notifications Heads-up

Avec Android 5.0 (API niveau 21), les notifications peuvent apparaître dans un petit fenêtre flottante (également appelée notification heads-up) lorsque le périphérique est actif (c’est-à-dire que le périphérique est déverrouillé et que son écran est allumé) . Ces notifications semblent similaires à la forme compacte de votre notification, sauf que la notification tête haute indique également l'action boutons. Les utilisateurs peuvent agir ou rejeter une notification heads-up sans quitter l'application actuelle.

Exemples de conditions pouvant déclencher des notifications heads-up comprendre:

  • L'activité de l'utilisateur est en mode plein écran (l'application utilise fullScreenIntent) ou 
  • La notification a priorité élevée et utilise sonneries ou vibrations
1
situee

Pour les appareils fonctionnant sous Android 8.0 (niveau d'API 26) et supérieur, le canal de notification requiert une grande importance 

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

Ajoutez cette ligne dans votre code pour afficher la notification en tête-à-tête, cela ne fonctionne que pour la version de Lollipop

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

Vous n'avez pas besoin de mettre en vibration. Il vous suffit de régler le son. C'est moins intrusif. Je n'ai aucun son sur le mien, mais la notification s'affiche en haut. Assurez-vous d'utiliser PRIORITY_HIGH et 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