149 votes

Les notifications Android ne s'affichent pas

J'ai besoin d'un programme qui ajoute une notification sur Android. Et lorsque quelqu'un clique sur la notification, cela doit le conduire à ma deuxième activité.

J'ai établi un code. La notification devrait fonctionner, mais pour une raison quelconque, elle ne fonctionne pas. Le site Notification n'apparaît pas du tout. Je ne sais pas ce que je rate.

Code de ces fichiers :

Notification n = new Notification.Builder(this)
        .setContentTitle("New mail from " + "test@gmail.com")
        .setContentText("Subject")
        .setContentIntent(pIntent).setAutoCancel(true)
        .setStyle(new Notification.BigTextStyle().bigText(longText))
        .build();

NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Hide the notification after it's selected

notificationManager.notify(0, n);

486voto

Choudhury A. M. Points 5072

Le code ne fonctionnera pas sans une icône. Donc, ajoutez le setSmallIcon l'appel à la chaîne de construction comme ça pour que ça marche :

.setSmallIcon(R.drawable.icon)

Android Oreo (8.0) et supérieur

Android 8 a introduit une nouvelle exigence consistant à définir le channelId en utilisant un NotificationChannel .

NotificationManager mNotificationManager;

NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(mContext.getApplicationContext(), "notify_001");
Intent ii = new Intent(mContext.getApplicationContext(), RootActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, ii, 0);

NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();
bigText.bigText(verseurl);
bigText.setBigContentTitle("Today's Bible Verse");
bigText.setSummaryText("Text in detail");

mBuilder.setContentIntent(pendingIntent);
mBuilder.setSmallIcon(R.mipmap.ic_launcher_round);
mBuilder.setContentTitle("Your Title");
mBuilder.setContentText("Your text");
mBuilder.setPriority(Notification.PRIORITY_MAX);
mBuilder.setStyle(bigText);

mNotificationManager =
    (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);

// === Removed some obsoletes
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
    String channelId = "Your_channel_id";
    NotificationChannel channel = new NotificationChannel(
                                        channelId,
                                        "Channel human readable title",
                                        NotificationManager.IMPORTANCE_HIGH);
   mNotificationManager.createNotificationChannel(channel);
  mBuilder.setChannelId(channelId);
}

mNotificationManager.notify(0, mBuilder.build());

59voto

dmmh Points 1124

En fait, la réponse de ƒernando Valle ne semble pas être correct. Mais, là encore, votre question est trop vague car vous ne mentionnez pas ce qui ne va pas ou ne fonctionne pas.

En regardant votre code, je suppose que le Notification ne se montre tout simplement pas.

Votre notification ne s'affiche pas, car vous n'avez pas fourni d'icône. Même si la documentation du SDK ne mentionne pas qu'elle est requise, elle l'est en fait beaucoup et votre Notification ne s'affichera pas sans elle.

addAction n'est disponible que depuis la version 4.1. Avant cela, vous deviez utiliser la fonction PendingIntent pour lancer un Activity . Vous semblez spécifier un PendingIntent donc votre problème est ailleurs. Logiquement, on doit en conclure que c'est l'icône manquante.

36voto

Vijay Srinivasan Points 458

Il vous manquait la petite icône. J'ai fait la même erreur et l'étape ci-dessus l'a résolue.

Selon la documentation officielle : A Notification doit contenir les éléments suivants :

  1. Une petite icône, définie par setSmallIcon()

  2. Un titre, fixé par setContentTitle()

  3. Texte détaillé, établi par setContentText()

  4. Sur Android 8.0 (niveau 26 de l'API) et supérieur un ID de canal de notification valide, défini par setChannelId() ou fourni dans le constructeur de NotificationCompat.Builder lors de la création d'un canal.

Ver http://developer.Android.com/guide/topics/ui/notifiers/notifications.html

21voto

Chee-Yi Points 257

Cela m'a fait trébucher aujourd'hui, mais j'ai réalisé que c'était parce que sur Android 9.0 (Pie), Ne pas déranger par défaut, masque également toutes les notifications, au lieu de simplement les faire taire comme en Android 8.1 (Oreo) et avant. Cela ne s'applique pas aux notifications.

J'aime que la fonction DND soit activée pour mon périphérique de développement. En allant dans les paramètres DND et en modifiant le paramètre pour simplement faire taire les notifications (mais pas pour les masquer), j'ai réglé le problème.

14voto

Amit Jaiswal Points 435

La création de canaux de notification est obligatoire pour les versions d'Android postérieures à Android 8.1 (Oreo) pour rendre les notifications visibles. Si les notifications ne sont pas visibles dans votre application pour les Androïdes Oreo+, vous devez appeler la fonction suivante lorsque votre application démarre -

private void createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name,
       importance);
        channel.setDescription(description);
        // Register the channel with the system; you can't change the importance
        // or other notification behaviours after this
        NotificationManager notificationManager =
        getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
   }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X