web-dev-qa-db-fra.com

Android la notification ne s'affiche pas

J'ai besoin d'un programme qui va ajouter une notification sur Android. Et quand quelqu'un clique sur la notification, cela devrait les conduire à ma deuxième activité.

J'ai établi le code. La notification devrait fonctionner, mais pour une raison quelconque, elle ne fonctionne pas. Le Notification ne s'affiche pas du tout. Je ne sais pas ce qui me manque.

Code de ces fichiers:

Notification n = new Notification.Builder(this)
        .setContentTitle("New mail from " + "[email protected]")
        .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);
97
Choudhury A. M.

Le code ne fonctionnera pas sans une icône. Ajoutez donc l'appel setSmallIcon à la chaîne de construction comme ceci pour que cela fonctionne:

.setSmallIcon(R.drawable.icon)

Android Oreo (8.0) et supérieur

Android 8 a introduit une nouvelle exigence consistant à définir la propriété channelId à l'aide de NotificationChannel.

private 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.SdkInt >= Android.OS.BuildVersionCodes.O)
{
    String channelId = "Your_channel_id";
    NotificationChannel channel = new NotificationChannel(
                                        channelId,
                                        "Channel human readable title",
                                        Android.App.NotificationImportance.Default);
   mNotificationManager.createNotificationChannel(channel);
  mBuilder.setChannelId(channelId);
}

mNotificationManager.notify(0, mBuilder.build());
363
Choudhury A. M.

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

En regardant votre code, je suppose que Notification n'est tout simplement pas affiché.

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 le fait que cela est nécessaire, il le fait en réalité beaucoup et votre Notification ne s'affichera pas sans un.

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

57
slinden77

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

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

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

  2. Un titre, défini par setContentTitle ()

  3. Texte de détail, défini par setContentText ()

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

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

29
Vijay Srinivasan

Cela m'a fait trébucher aujourd'hui, mais j'ai réalisé que c'était parce que sur Android 9. (Tarte), Ne pas déranger par défaut également cache toutes les notifications, plutôt que de simplement les réduire au silence comme dans Android 8.1 (Oreo) et avant. Cela ne s'applique pas aux notifications.

J'aime avoir activé l'option DND pour mon périphérique de développement. Il a donc été corrigé pour moi de modifier les paramètres pour les désactiver (il ne faut pas les masquer).

8
Chee-Yi

La création de canaux de notification est obligatoire pour Android versions après Android 8.1 (Oreo) pour rendre les notifications visibles. Si les notifications ne sont pas visibles dans votre application pour Oreo + Androids, vous devez appeler la fonction suivante au démarrage de votre application -

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);
   }
}
5
Amit Jaiswal

Je pense que tu oublies le

addAction(int icon, CharSequence title, PendingIntent intent)

Regardez ici: Ajouter une action

1
ƒernando Valle

Pour moi, c'était un problème avec deviceToken. Veuillez vérifier si le jeton du récepteur et du périphérique émetteur est correctement mis à jour dans votre base de données ou à l'endroit où vous y accédez pour envoyer des notifications.

Par exemple, utilisez ce qui suit pour mettre à jour le jeton de périphérique au lancement de l'application. Par conséquent, il sera toujours mis à jour correctement.

// Device token for Push notifications
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(
  new OnSuccessListener<InstanceIdResult>() {

    @Override
    public void onSuccess(InstanceIdResult instanceIdResult) {

        deviceToken = instanceIdResult.getToken();

        // Insert device token into Firebase database
        fbDbRefRoot.child("user_detail_profile").child(currentUserId).child("device_token")).setValue(deviceToken)
                .addOnSuccessListener(
                  new OnSuccessListener<Void>() {

                    @Override
                    public void onSuccess(Void aVoid) {

                    }
                });
    }
});
1
DragonFire

Vous ne savez pas si cela est toujours actif, mais vous devez également modifier le fichier build.gradle et y ajouter la version utilisée Android SDK,

implémentation 'com.Android.support:appcompat-v7:28.0.0'

Cela a fonctionné comme un charme dans mon cas

0
Ashwin Balani

J'ai eu le même problème avec mon Android app. J'essayais des notifications et j'ai constaté que des notifications étaient affichées sur mon Android émulateur qui exécutait un Android 7. (Nougat), alors qu'il ne fonctionnait pas sur mon téléphone qui avait Android 8.1 (Oreo).

Après avoir lu la documentation, j'ai constaté que Android possédait une fonctionnalité appelée canal de notification, sans laquelle les notifications ne s'afficheraient pas sur les appareils Oreo. Vous trouverez ci-dessous le lien vers Android documentation sur les canaux de notification.

0
SHIVAM CHAUDHARY