Comment créer une notification avec NotificationCompat.Builder?

J'ai besoin de créer une notification simple qui sera affichée dans la barre de notification avec le son et l'icône si possible? J'ai aussi besoin qu'il soit compatitible avec Android 2.2, donc j'ai trouvé que NotificationCompat.Builder fonctionne avec toutes les API ci-dessus 4. S'il y a une meilleure solution, n'hésitez pas à le mentionner.

47
demandé sur Vladimir 2012-12-16 18:15:02

7 réponses

Le NotificationCompat.Builder est le moyen le plus facile de créer Notifications sur toutes les versions Android. Vous pouvez même utiliser des fonctionnalités qui sont disponibles avec Android 4.1. Si votre application fonctionne sur des appareils avec Android > = 4.1 les nouvelles fonctionnalités seront utilisées, si elle est exécutée sur Android

Pour créer une Notification simple, il suffit de le faire (voir Guide de L'API Android sur les Notifications):

NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.notification_icon)
    .setContentTitle("My notification")
    .setContentText("Hello World!")
    .setContentIntent(pendingIntent); //Required on Gingerbread and below

, Vous devez définir au moins smallIcon, contentTitle et contentText. Si vous en manquez un, la Notification ne s'affichera pas.

Attention: sur Gingerbread et ci-dessous, vous devez définir l'intention du contenu, sinon un IllegalArgumentException sera lancé.

Pour créer une intention qui ne fait rien, utilisez:

final Intent emptyIntent = new Intent();
PendingIntent pendingIntent = PendingIntent.getActivity(ctx, NOT_USED, emptyIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Vous pouvez ajouter du son via le générateur, c'est-à-dire un son du RingtoneManager:

mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))

La Notification est ajoutée à la barre via NotificationManager:

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(mId, mBuilder.build());
114
répondu thaussma 2017-07-24 20:29:35

Exemple de travail:

    Intent intent = new Intent(ctx, HomeActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder b = new NotificationCompat.Builder(ctx);

    b.setAutoCancel(true)
     .setDefaults(Notification.DEFAULT_ALL)
     .setWhen(System.currentTimeMillis())         
     .setSmallIcon(R.drawable.ic_launcher)
     .setTicker("Hearty365")            
     .setContentTitle("Default notification")
     .setContentText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
     .setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_SOUND)
     .setContentIntent(contentIntent)
     .setContentInfo("Info");


    NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(1, b.build());
21
répondu Sumoanand 2014-12-31 13:30:04

Je fais cette méthode et fonctionne bien. (testé dans android 6.0.1)

public void notifyThis(String title, String message) {
    NotificationCompat.Builder b = new NotificationCompat.Builder(this.context);
    b.setAutoCancel(true)
            .setDefaults(NotificationCompat.DEFAULT_ALL)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.drawable.favicon32)
            .setTicker("{your tiny message}")
            .setContentTitle(title)
            .setContentText(message)
            .setContentInfo("INFO");

    NotificationManager nm = (NotificationManager) this.context.getSystemService(Context.NOTIFICATION_SERVICE);
    nm.notify(1, b.build());
}
8
répondu Dario Roman Garcia Gonzalez 2017-02-10 17:59:36

Vous pouvez essayer ce code cela fonctionne bien pour moi:

    NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this);

    Intent i = new Intent(noti.this, Xyz_activtiy.class);
    PendingIntent pendingIntent= PendingIntent.getActivity(this,0,i,0);

    mBuilder.setAutoCancel(true);
    mBuilder.setDefaults(NotificationCompat.DEFAULT_ALL);
    mBuilder.setWhen(20000);
    mBuilder.setTicker("Ticker");
    mBuilder.setContentInfo("Info");
    mBuilder.setContentIntent(pendingIntent);
    mBuilder.setSmallIcon(R.drawable.home);
    mBuilder.setContentTitle("New notification title");
    mBuilder.setContentText("Notification text");
    mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

    NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(2,mBuilder.build());
1
répondu Rohit Lalwani 2017-11-22 18:59:59

Moyen Simple pour faire des notifications

 NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher) //icon
            .setContentTitle("Test") //tittle
            .setAutoCancel(true)//swipe for delete
            .setContentText("Hello Hello"); //content
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.notify(1, builder.build()
    );
1
répondu robby dwi hartanto 2018-05-31 23:06:28

Notification en profondeur

CODE

Intent intent = new Intent(this, SecondActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);

NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.your_notification_icon)
                        .setContentTitle("Notification Title")
                        .setContentText("Notification ")
                        .setContentIntent(pendingIntent );

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, mBuilder.build());

Connaissance Approfondie

La Notification peut être générée à L'aide de la Notification. Builder ou NotificationCompat.Classes de constructeur.
Mais si vous voulez une compatibilité descendante, vous devez utiliser NotificationCompat.Builder class car il fait partie de bibliothèque de Support v4 car il prend soin de levage lourd pour fournir une apparence cohérente et des fonctionnalités de Notification pour API 4 et au-dessus.

Notification De Base Propriétés

Une notification possède 4 propriétés de base (3 propriétés D'affichage de base + 1 propriété d'action de clic)

  • Petite icône
  • Titre
  • texte
  • bouton cliquez sur événement (cliquez sur événement lorsque vous appuyez sur la notification )

L'événement de clic de bouton est rendu facultatif sur Android 3.0 et supérieur. Cela signifie que vous pouvez créer votre notification en utilisant uniquement les propriétés d'affichage si votre minsdk cible Android 3.0 ou supérieur. Mais si vous voulez que votre notification à exécuter sur des appareils plus anciens que Android 3.0, vous devez fournir un événement de clic sinon vous verrez IllegalArgumentException.

Affichage Des Notifications

Les notifications sont affichées en appelant notify () méthode de NotificationManger Classe

Notify() paramètres

Deux variantes sont disponibles pour la méthode notify

notify(String tag, int id, Notification notification)

Ou

notify(int id, Notification notification)

La méthode Notify prend un id entier pour identifier notification. Cependant, vous pouvez également fournir une balise de chaîne facultative pour une identification supplémentaire de votre notification en cas de conflit.

Ce type de conflit est rare mais disons, vous avez créé une bibliothèque et d'autres développeurs utilisent votre bibliothèque. Maintenant, ils créent leur propre notification et en quelque sorte votre notification et d'autres dev l'id de notification est le même, alors vous ferez face à un conflit.

Notification après API 11 (plus de contrôle)

API 11 fournit un contrôle supplémentaire sur le comportement de Notification

  • Notification De Licenciement
    Par défaut, si un utilisateur appuie sur la notification, il effectue l'événement de clic attribué, mais il n'efface pas la notification. Si vous voulez que votre notification soit effacée quand alors vous devriez ajouter ceci

    MBuilder.setAutoClear(vrai);

  • Empêcher l'utilisateur de renvoyer la notification
    Un utilisateur peut également rejeter la notification par glisser-il. Vous pouvez désactiver ce comportement par défaut en l'ajoutant lors de la création de votre notification

    MBuilder.setOngoing (vrai);

  • Le Positionnement de la notification
    Vous pouvez définir la priorité relative à votre notification par

    MBuilder.setOngoing (int pri);

Si votre application fonctionne avec une API inférieure à 11, votre notification fonctionnera sans fonctionnalités supplémentaires mentionnées ci-dessus. C'est l'avantage de choisir NotificationCompat.Builder sur Notification.Constructeur

Notification après API 16 (plus informatif)

Avec L'introduction de L'API 16, les notifications ont été données tant de nouvelles fonctionnalités
La Notification peut être tellement plus informative.
Vous pouvez ajouter un bigPicture à votre logo. Dites que vous obtenez un message d'une personne maintenant avec le mBuilder.setLargeIcon (Bitmap bitmap) vous pouvez montrer la photo de cette personne. Donc, dans la barre d'état, vous verrez l'icône lorsque vous faites défiler, vous verrez l' personne photo à la place de l'icône. Il y a aussi d'autres fonctionnalités

  • Ajouter un compteur dans la notification
  • message Ticker lorsque vous voyez la notification pour la première fois
  • notification extensible
  • notification multiligne et ainsi de suite
1
répondu Rohit Singh 2018-10-05 17:23:58

Utilisez ce code

            Intent intent = new Intent(getApplicationContext(), SomeActvity.class);
            PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(),
                    (int) System.currentTimeMillis(), intent, 0);

            NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(getApplicationContext())
                            .setSmallIcon(R.drawable.your_notification_icon)
                            .setContentTitle("Notification title")
                            .setContentText("Notification message!")
                            .setContentIntent(pIntent);

            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.notify(0, mBuilder.build());
0
répondu Faxriddin Abdullayev 2017-07-17 12:00:23