it-swarm.com.de

Android O-Benachrichtigungsbenachrichtigung wurde nicht in den Kanal gepostet - ist es aber

Paar Android O Benachrichtigungsfragen:

1) Ich habe einen Benachrichtigungskanal erstellt (siehe unten), rufe den Builder mit .setChannelId () auf (den Namen des von mir erstellten Kanals "wakey" übergeben und trotzdem bekomme ich eine Meldung, wenn ich die App starte) dass ich keine Nachricht an den Kanal "null" senden konnte. Was kann dies verursachen?

2) Ich vermute, die Antwort auf # 1 kann im "Protokoll" gefunden werden, das zu prüfen ist, aber ich habe logcat überprüft und sehe nichts über Benachrichtigungen oder Channels. Wo ist das Protokoll, in dem es zu suchen ist?

Hier ist der Code, den ich zum Erstellen des Kanals verwende:

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);

Hier ist der Code zum Generieren der Benachrichtigung:

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);

Und hier ist die Warnung, die ich bekomme:  enter image description here

38
jkane001

Ich glaube, ich habe ein paar Dinge gelernt, die sich zu einer Antwort zusammenfassen:

  1. Ich verwendete ein Emulatorgerät mit einem Bild, das den Play Store nicht enthielt.
  2. Die auf dem Bild enthaltene Version der Google Play-Dienste war nicht die neueste. Daher hätte ich eine Benachrichtigung erhalten, in der mir mitgeteilt wurde, dass ich ein Upgrade durchführen musste. Da diese Benachrichtigung nicht auf einen Kanal angewendet wurde, wurde sie nicht angezeigt.
  3. Wenn ich logcat in Android Studio auf "Keine Filter" anstelle von "Nur ausgewählte Anwendung anzeigen" eingestellt habe, habe ich die Protokolle gefunden, die darauf hinweisen, dass es sich bei der betreffenden Benachrichtigung um die Benachrichtigung von Play Services "Aktualisierung erforderlich" handelt.

Also wechselte ich zu einem Bild, in dem der Play Store enthalten war, und es wurde die Benachrichtigung korrekt angezeigt (der Kanal für diese Benachrichtigung sollte vom Play Store festgelegt werden?). Lassen Sie mich auf die neuesten Google Play Services aktualisieren Diese Warnung habe ich seitdem nicht gesehen.

Um es kurz zu machen (zu spät) - mit Android O: Wenn Sie Google Play Services & Testing für den Emulator verwenden, wählen Sie ein Bild mit dem enthaltenen Play Store aus oder ignorieren Sie den Toast (viel Glück dabei!).

31
jkane001

Erstellen Sie zuerst den Benachrichtigungskanal:

 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);

verwenden Sie dann die Kanal-ID im Konstruktor:

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

Ich hatte das gleiche Problem und löste es mit dem Konstruktor

new Notification.Builder(Context context, String channelId), anstelle von veraltet onAPI-Ebenen> = 26 (Android O): new NotificationCompat.Builder(Context context)

Der folgende Code funktioniert nicht, wenn Ihr notificationBuilder mit dem veralteten Konstruktor erstellt wurde:

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

erstellen Sie eine Benachrichtigung mit folgendem Code:

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

nicht mit: 

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

Sie müssen zuerst einen NotificationChannel erstellen

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

Dies ist die einzige Möglichkeit, Benachrichtigungen für API 26+ anzuzeigen

1
dr3k

Ich hatte das gleiche Problem. Es wurde behoben, indem ein NotificationChannel erstellt und der neu erstellte Kanal mit dem Benachrichtigungsmanager hinzugefügt wurde.

0
user3724755

Du musst vorher einen Kanal erstellen. 

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());
}

Zum Schluss rufen Sie diese Methode auf:

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