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.
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());
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());
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());
}
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());
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()
);
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 ceciMBuilder.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 notificationMBuilder.setOngoing (vrai);
-
Le Positionnement de la notification
Vous pouvez définir la priorité relative à votre notification parMBuilder.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
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());