web-dev-qa-db-fra.com

Notification de notification Android O non postée sur le canal - mais c’est

Couple de questions de notification Android O:

1) J'ai créé un canal de notification (voir ci-dessous), j'appelle le constructeur avec .setChannelId () (en lui donnant le nom du canal que j'ai créé, "wakey"; et pourtant, lorsque je lance l'application, je reçois un message. que je n'ai pas envoyé de notification au canal "null". Quelle en est la cause?

2) Je soupçonne que la réponse à la question 1 se trouve dans le "journal" qu'il est indiqué de vérifier, mais j'ai vérifié logcat et je ne vois rien des notifications ou des canaux. Où est le journal qu'il est dit de regarder?

Voici le code que j'utilise pour créer le canal:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence name = context.getString(R.string.app_name);
String description = "yadda yadda"
int importance = NotificationManager.IMPORTANCE_DEFAULT;

NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL, name, importance);
channel.setDescription(description);

notificationManager.createNotificationChannel(channel);

Voici le code pour générer la notification:

Notification.Builder notificationBuilder;

Intent notificationIntent = new Intent(context, BulbActivity.class);
notificationIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); // Fix for https://code.google.com/p/Android/issues/detail?id=53313

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

Intent serviceIntent = new Intent(context, RemoteViewToggleService.class);
serviceIntent.putExtra(WakeyService.KEY_REQUEST_SOURCE, WakeyService.REQUEST_SOURCE_NOTIFICATION);

PendingIntent actionPendingIntent = PendingIntent.getService(context, 0, serviceIntent, PendingIntent.FLAG_CANCEL_CURRENT);
_toggleAction = new Notification.Action(R.drawable.ic_power_settings_new_black_24dp, context.getString(R.string.toggle_wakey), actionPendingIntent);

notificationBuilder= new Notification.Builder(context)
    .setContentTitle(context.getString(R.string.app_name))
    .setContentIntent(contentIntent)
    .addAction(_toggleAction);

if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.O) {
    notificationBuilder.setChannelId(NOTIFICATION_CHANNEL);
}

notificationBuilder.setSmallIcon(icon);
notificationBuilder.setContentText(contentText);
_toggleAction.title = actionText;

int priority = getNotificationPriority(context);
notificationBuilder.setPriority(priority);
notificationBuilder.setOngoing(true);

Notification notification = notificationBuilder.build();
notificationManager.notify(NOTIFICATION_ID, notification);

Et voici l'avertissement que je reçois:  enter image description here

38
jkane001

Je pense avoir appris une ou deux choses qui concourent toutes à une réponse:

  1. J'utilisais un émulateur, avec une image n'incluant pas le Play Store.
  2. La version des services Google Play sur l'image n'étant pas la dernière, j'aurais dû recevoir une notification m'indiquant que je devais effectuer la mise à niveau. Puisque cette notification n'a pas été appliquée à un canal, elle n'apparaît pas.
  3. Si je règle logcat dans Android Studio sur "Aucun filtre" au lieu de "Afficher uniquement l'application sélectionnée", je trouvais alors les journaux qui indiquaient que la notification en question était la notification "Mise à jour nécessaire" de Play Services.

Alors, j'ai changé pour une image avec le Play Store inclus, et elle montrait la notification correctement (peut-être que le canal pour cette notification devait être défini par le Play Store?), Laissez-moi mettre à jour les derniers services Google Play, et je Je n'ai pas vu cet avertissement depuis.

Donc, histoire courte (trop tard) - avec Android O, si vous utilisez les services Google Play et effectuez des tests sur l'émulateur, choisissez une image avec le Play Store inclus ou ignorez le pain grillé (bonne chance pour celui-là!).

31
jkane001

Commencez par créer le canal de notification:

 public static final String NOTIFICATION_CHANNEL_ID = "4565";
//Notification Channel
        CharSequence channelName = NOTIFICATION_CHANNEL_NAME;
        int importance = NotificationManager.IMPORTANCE_LOW;
        NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, NOTIFICATION_CHANNEL_NAME, importance);
        notificationChannel.enableLights(true);
        notificationChannel.setLightColor(Color.RED);
        notificationChannel.enableVibration(true);
        notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});


NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(notificationChannel);

puis utilisez l'identifiant de canal dans le constructeur:

final NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
                .setDefaults(Notification.DEFAULT_ALL)
                .setSmallIcon(R.drawable.ic_timers)
                .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400})
                .setSound(null)
                .setChannelId(NOTIFICATION_CHANNEL_ID)
                .setContent(contentView)
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .setLargeIcon(picture)
                .setTicker(sTimer)
                .setContentIntent(pendingIntent)
                .setAutoCancel(false);
7
Gulzar Bhat

créer une notification en utilisant le code suivant:

    Notification notification = new Notification.Builder(MainActivity.this)
              .setContentTitle("New Message")
                        .setContentText("You've received new messages.")
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setChannelId(channelId)
                        .build();

n'utilise pas : 

Notification notification = new NotificationCompat.Builder(MainActivity.this)
                    .setContentTitle("Some Message")
                    .setContentText("You've received new messages!")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setChannel(channelId)
                    .build();
2
Abhilash Das

Vous devez d'abord créer un NotificationChannel

val notificationChannel = NotificationChannel("channelId", "channelName", NotificationManager.IMPORTANCE_DEFAULT)
notificationManager.createNotificationChannel(notificationChannel);

C’est le seul moyen d’afficher une notification pour l’API 26+

1
dr3k

Je faisais face au même problème. Il a été résolu en créant un NotificationChannel et en ajoutant ce canal nouvellement créé avec le gestionnaire de notifications.

0
user3724755

Tu dois créer un canal avant. 

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 behaviors after this
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);
        }
}

public void notifyThis(String title, String message) {
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
                .setSmallIcon(R.drawable.green_circle)
                .setContentTitle(title)
                .setContentText(message)
                .setPriority(NotificationCompat.PRIORITY_DEFAULT);

        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);

        // notificationId is a unique int for each notification that you must define
        notificationManager.notify(0, mBuilder.build());
}

Enfin, vous appelez cette méthode:

createNotificationChannel();
notifyThis("My notification", "Hello World!");
0
Mattia Ferigutti