wake-up-neo.com

On Android 8.1 API 27-Benachrichtigung wird nicht angezeigt

Ich bekomme Toast auf Android 8.1 API 27:

Entwicklerwarnung für Paket "my_package_name"
Fehler beim Posten der Benachrichtigung am ...

Logcat enthält die nächsten Zeichenfolgen:

Benachrichtigung: Die Verwendung von Stream-Typen ist für andere Vorgänge als die Lautstärkeregelung veraltet

Mit Benachrichtigung: Informationen zur Verwendung mit Android.media.AudioAttributes finden Sie in der Dokumentation zu setSound ()

E/NotificationService: Für pkg = my_package_name wurde kein Kanal gefunden

Die vollständigen Informationen im Toast und in Logcat können bei der Lokalisierung dieses Problems helfen.

28
Andy Sander

Wenn Sie diese Fehlermeldung erhalten, sollten Sie auf 2 Artikel achten und diese bestellen:

  1. NotificationChannel mChannel = new NotificationChannel(id, name, importance);
  2. builder = new NotificationCompat.Builder(context, id);

Auch NotificationManager notifManager und NotificationChannel mChannel werden nur einmal erstellt.

Für die Benachrichtigung sind folgende Setter erforderlich:

  • builder.setContentTitle () // erforderlich
  • .setSmallIcon () // erforderlich
  • .setContentText () // erforderlich

Siehe Beispiel:

private NotificationManager notifManager;
public void createNotification(String aMessage, Context context) {
    final int NOTIFY_ID = 0; // ID of notification
    String id = context.getString(R.string.default_notification_channel_id); // default_channel_id
    String title = context.getString(R.string.default_notification_channel_title); // Default Channel
    Intent intent;
    PendingIntent pendingIntent;
    NotificationCompat.Builder builder;
    if (notifManager == null) {
        notifManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        int importance = NotificationManager.IMPORTANCE_HIGH;
        NotificationChannel mChannel = notifManager.getNotificationChannel(id);
        if (mChannel == null) {
            mChannel = new NotificationChannel(id, title, importance);
            mChannel.enableVibration(true);
            mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
            notifManager.createNotificationChannel(mChannel);
        }
        builder = new NotificationCompat.Builder(context, id);
        intent = new Intent(context, MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
        builder.setContentTitle(aMessage)                            // required
               .setSmallIcon(Android.R.drawable.ic_popup_reminder)   // required
               .setContentText(context.getString(R.string.app_name)) // required
               .setDefaults(Notification.DEFAULT_ALL)
               .setAutoCancel(true)
               .setContentIntent(pendingIntent)
               .setTicker(aMessage)
               .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
    }
    else {
        builder = new NotificationCompat.Builder(context, id);
        intent = new Intent(context, MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
        builder.setContentTitle(aMessage)                            // required
               .setSmallIcon(Android.R.drawable.ic_popup_reminder)   // required
               .setContentText(context.getString(R.string.app_name)) // required
               .setDefaults(Notification.DEFAULT_ALL)
               .setAutoCancel(true)
               .setContentIntent(pendingIntent)
               .setTicker(aMessage)
               .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400})
               .setPriority(Notification.PRIORITY_HIGH);
    }
    Notification notification = builder.build();
    notifManager.notify(NOTIFY_ID, notification);
}
75
Andy Sander

Andys Antwort funktioniert, aber ich wollte vermeiden, Builder als veraltet zu bezeichnen und dem FireBase-Schnellstartprojekt zu folgen. Ich habe gerade Code hinzugefügt, bevor ich vom Manager benachrichtigt wurde.

String channelId = "default_channel_id";
String channelDescription = "Default Channel";
// Since Android Oreo notification channel is needed.
//Check if notification channel exists and if not create one
if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.O) {
    NotificationChannel notificationChannel = notificationManager.getNotificationChannel(channelId);
    if (notificationChannel == null) {
        int importance = NotificationManager.IMPORTANCE_HIGH; //Set the importance level
        notificationChannel = new NotificationChannel(channelId, channelDescription, importance);
        notificationChannel.setLightColor(Color.GREEN); //Set if it is necesssary
        notificationChannel.enableVibration(true); //Set if it is necesssary
        notificationManager.createNotificationChannel(notificationChannel);
    }
}

//notificationManager.notify as usual

Edit: Sie haben den Channel Exist Check aus dem Beispiel entfernt. Ich bin mir nicht sicher warum.

16
engincancan

Ich habe die Kanal-ID eingestellt, aber die Benachrichtigung wird immer noch nicht angezeigt.

Schließlich fand ich, dass mein Problem nicht "setContentText ()" Methode aufrufen musste.

Es hat mir wirklich geholfen, dass @ Andy Sander "Pflichtfelder" genannt hat!

hier sind die erforderlichen Setter für die Benachrichtigung auf Android 8 Oreo API 26 und höher:

builder.setContentTitle() // required
.setSmallIcon() // required
.setContentText() // required
.setChannelId(id) // required for deprecated in API level >= 26 constructor .Builder(this)
9
Jeffery Ma

Vergessen Sie auch nicht, Ihre channel_id an Ihren Benachrichtigungsgenerator zu binden. Nach dem Binden ist mein Problem weg.

notificationBuilder.setChannelId(channelId)

oder

NotificationCompat.Builder(Context context, String channelId)
3
asozcan