Benachrichtigungskanäle erstellen und verwalten

Ab Android 8.0 (API-Ebene 26) müssen alle Benachrichtigungen einem Kanal zugeordnet werden. Für jeden Kanal können Sie das visuelle und akustische Verhalten festlegen, das auf alle Benachrichtigungen in diesem Kanal angewendet wird. Nutzer können diese Einstellungen ändern und entscheiden, welche Benachrichtigungskanäle Ihrer App aufdringlich oder sichtbar sein sollen.

Im folgenden Video finden Sie eine Übersicht über Kanäle und andere Benachrichtigungsfunktionen in Android 8.0.

Die Nutzereinstellungen für Benachrichtigungskanäle sind für jede App in den Systemeinstellungen verfügbar, wie in Abbildung 1 dargestellt.

Abbildung 1 : Benachrichtigungseinstellungen für die Uhr-App und einen ihrer Kanäle.

Nachdem Sie einen Benachrichtigungskanal erstellt haben, können Sie das Benachrichtigungsverhalten nicht mehr ändern. Der Nutzer hat dann die vollständige Kontrolle. Sie können jedoch weiterhin den Namen und die Beschreibung eines Kanals ändern.

Erstellen Sie einen Kanal für jede Art von Benachrichtigung, die Sie senden müssen. Sie können auch Benachrichtigungskanäle erstellen, um die Entscheidungen der Nutzer widerzuspiegeln. So können beispielsweise separate Benachrichtigungskanäle für jede Konversationsgruppe eingerichtet werden, die vom Nutzer in einer Messaging-App erstellt wird.

Wenn Sie auf Android 8.0 (API-Ebene 26) oder höher ausgerichtet sind, müssen Sie einen oder mehrere Benachrichtigungskanäle implementieren. Wenn targetSdkVersion auf 25 oder niedriger festgelegt ist, verhält sich Ihre App unter Android 8.0 (API-Ebene 26) oder höher genauso wie auf Geräten mit Android 7.1 (API-Ebene 25) oder niedriger.

Benachrichtigungskanal erstellen

So erstellen Sie einen Benachrichtigungskanal:

  1. Erstellen Sie ein NotificationChannel-Objekt mit einer eindeutigen Kanal-ID, einem für Nutzer sichtbaren Namen und einer Prioritätsstufe.

  2. Optional können Sie mit setDescription() die Beschreibung angeben, die der Nutzer in den Systemeinstellungen sieht.

  3. Registrieren Sie den Benachrichtigungskanal, indem Sie ihn an createNotificationChannel() übergeben.

Im folgenden Beispiel wird gezeigt, wie Sie einen Benachrichtigungskanal erstellen und registrieren:

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
      // Create the NotificationChannel.
      val name = getString(R.string.channel_name)
      val descriptionText = getString(R.string.channel_description)
      val importance = NotificationManager.IMPORTANCE_DEFAULT
      val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
      mChannel.description = descriptionText
      // Register the channel with the system. You can't change the importance
      // or other notification behaviors after this.
      val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
      notificationManager.createNotificationChannel(mChannel)
  }

Wenn Sie einen vorhandenen Benachrichtigungskanal mit seinen ursprünglichen Werten neu erstellen, wird keine Aktion ausgeführt. Sie können diesen Code also gefahrlos beim Starten einer App aufrufen.

Standardmäßig verwenden alle Benachrichtigungen, die an einen bestimmten Kanal gesendet werden, das visuelle und akustische Verhalten, das durch die Prioritätsstufe aus der NotificationManagerCompat definiert wird, z. B. IMPORTANCE_DEFAULT oder IMPORTANCE_HIGH. Weitere Informationen zu Prioritätsstufen finden Sie im nächsten Abschnitt.

Wenn Sie das Standardverhalten für Benachrichtigungen Ihres Kanals weiter anpassen möchten, können Sie Methoden wie enableLights(), setLightColor(), und setVibrationPattern() für NotificationChannel aufrufen. Beachten Sie, dass Sie diese Einstellungen nach dem Erstellen des Kanals nicht mehr ändern können und der Nutzer die endgültige Kontrolle darüber hat, ob diese Verhaltensweisen aktiv sind.

Sie können auch mehrere Benachrichtigungskanäle in einem einzigen Vorgang erstellen, indem Sie createNotificationChannels() aufrufen.

Prioritätsstufe festlegen

Die Kanalpriorität wirkt sich auf die Unterbrechungsstufe aller Benachrichtigungen aus, die in diesem Kanal gesendet werden. Geben Sie sie im NotificationChannel Konstruktor mit einer von fünf Prioritätsstufen an, von IMPORTANCE_NONE(0) bis IMPORTANCE_HIGH(4).

Wenn Sie Geräte mit Android 7.1 (API-Level 25) oder niedriger unterstützen möchten, müssen Sie auch setPriority() für jede Benachrichtigung aufrufen und eine Prioritätskonstante aus der Klasse NotificationCompat verwenden.

Die Konstanten für Priorität (NotificationManager.IMPORTANCE_*) und Priorität (NotificationCompat.PRIORITY_*) werden den für Nutzer sichtbaren Prioritätsoptionen zugeordnet, wie in der folgenden Tabelle dargestellt.

Für Nutzer sichtbare Prioritätsstufe Priorität (Android 8.0 und höher) Priorität (Android 7.1 und niedriger)
Dringend
Akustisches Signal ertönt, wichtige Benachrichtigung wird angezeigt
IMPORTANCE_HIGH PRIORITY_HIGH oder PRIORITY_MAX
Hoch
Akustisches Signal ertönt
IMPORTANCE_DEFAULT PRIORITY_DEFAULT
Medium
Kein akustisches Signal
IMPORTANCE_LOW PRIORITY_LOW
Niedrig
Kein akustisches Signal und wird nicht auf der Statusleiste angezeigt
IMPORTANCE_MIN PRIORITY_MIN
Keine
Kein akustisches Signal und wird nicht auf der Statusleiste oder in der Benachrichtigungsleiste angezeigt
IMPORTANCE_NONE N/A

Alle Benachrichtigungen werden unabhängig von der Priorität an nicht störenden Stellen auf der System Benutzeroberfläche angezeigt, z. B. auf der Benachrichtigungsleiste und als Kennzeichen auf dem Launcher-Symbol. Das Design des Benachrichtigungskennzeichens kann geändert werden.

Nachdem Sie den Kanal an NotificationManager gesendet haben, können Sie die Prioritätsstufe nicht mehr ändern. Der Nutzer kann jedoch jederzeit seine Einstellungen für die Kanäle Ihrer App ändern.

Informationen zum Auswählen einer geeigneten Prioritätsstufe finden Sie im Designleitfaden für Benachrichtigungen unter Prioritäts stufen.

Einstellungen für Benachrichtigungskanäle lesen

Nutzer können die Einstellungen für Benachrichtigungskanäle ändern, einschließlich Verhaltensweisen wie Vibration und Benachrichtigungston. Wenn Sie die Einstellungen kennen möchten, die ein Nutzer auf Ihre Benachrichtigungskanäle anwendet, gehen Sie so vor:

  1. Rufen Sie das NotificationChannel Objekt mit getNotificationChannel() oder getNotificationChannels() ab.

  2. Fragen Sie bestimmte Kanaleinstellungen ab, z. B. getVibrationPattern(), getSound() und getImportance().

Wenn Sie eine Kanaleinstellung erkennen, die Ihrer Meinung nach das beabsichtigte Verhalten Ihrer App beeinträchtigt, können Sie dem Nutzer vorschlagen, sie zu ändern, und eine Aktion zum Öffnen der Kanaleinstellungen bereitstellen, wie im nächsten Abschnitt beschrieben.

Einstellungen für Benachrichtigungskanäle öffnen

Nachdem Sie einen Benachrichtigungskanal erstellt haben, können Sie das visuelle und akustische Verhalten des Benachrichtigungskanals nicht mehr programmatisch ändern. Nur der Nutzer kann das Kanalverhalten in den Systemeinstellungen ändern. Damit Ihre Nutzer schnell auf diese Benachrichtigungseinstellungen zugreifen können, fügen Sie in der Benutzeroberfläche der Einstellungen Ihrer App ein Element hinzu, mit dem diese Systemeinstellungen geöffnet werden.

Sie können die Systemeinstellungen für Benachrichtigungskanäle mit einem Intent öffnen, das die ACTION_CHANNEL_NOTIFICATION_SETTINGS Aktion verwendet.

Im folgenden Beispielcode wird gezeigt, wie Sie einen Nutzer zu den Einstellungen für einen Benachrichtigungskanal weiterleiten können:

  val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
      putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
      putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId())
  }
  startActivity(intent)

Die Intent erfordert zwei Extras, die den Paketnamen Ihrer App (auch als Anwendungs-ID bezeichnet) und den zu bearbeitenden Kanal angeben.

Benachrichtigungskanal löschen

Sie können Benachrichtigungskanäle mit deleteNotificationChannel() löschen. Im folgenden Beispielcode wird gezeigt, wie Sie diesen Vorgang ausführen:

  // The id of the channel.
  val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
  val id: String = "my_channel_01"
  notificationManager.deleteNotificationChannel(id)

Benachrichtigungskanalgruppe erstellen

Wenn Sie die Darstellung Ihrer Kanäle in der Benutzeroberfläche der Einstellungen weiter organisieren möchten, können Sie Kanalgruppen erstellen. Das ist eine gute Idee, wenn Ihre App mehrere Nutzerkonten unterstützt, da Sie für jedes Konto eine Benachrichtigungskanalgruppe erstellen können. Mit Kanalgruppen können Nutzer mehrere Benachrichtigungskanäle mit identischen Namen unterscheiden und steuern.

Abbildung 2 : Einstellungen für Benachrichtigungskanäle mit Gruppen für private und Arbeitskonten.

Eine App für soziale Netzwerke kann beispielsweise Unterstützung für private und Arbeitskonten bieten. In diesem Fall sind für jedes Konto möglicherweise mehrere Benachrichtigungskanäle mit identischen Funktionen und Namen erforderlich, z. B.:

  • Ein privates Konto mit zwei Kanälen:

    • Neue Kommentare

    • Beitragsempfehlungen

  • Ein Geschäftskonto mit zwei Kanälen:

    • Neue Kommentare

    • Beitragsempfehlungen

Wenn Sie die Benachrichtigungskanäle in Gruppen für jedes Konto organisieren, können Nutzer sie unterscheiden.

Jede Benachrichtigungskanalgruppe erfordert eine ID, die innerhalb Ihres Pakets eindeutig sein muss, sowie einen für Nutzer sichtbaren Namen. Im folgenden Codebeispiel wird gezeigt, wie Sie eine Benachrichtigungskanalgruppe erstellen.

  // The id of the group.
  val groupId = "my_group_01"
  // The user-visible name of the group.
  val groupName = getString(R.string.group_name)
  val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
  <b>notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))</b>

Nachdem Sie eine neue Gruppe erstellt haben, können Sie setGroup() aufrufen, um ein neues NotificationChannel Objekt der Gruppe zuzuordnen.

Nachdem Sie den Kanal an den Benachrichtigungsmanager gesendet haben, können Sie die Zuordnung zwischen Benachrichtigungskanal und Gruppe nicht mehr ändern.