Lokale Benachrichtigungen unter Android

In diesem Abschnitt wird gezeigt, wie lokale Benachrichtigungen in Xamarin.Android implementiert werden. Es erläutert die verschiedenen UI-Elemente einer Android-Benachrichtigung und erläutert die mit dem Erstellen und Anzeigen einer Benachrichtigung verbundenen API.

Übersicht über lokale Benachrichtigungen

Android bietet zwei systemgesteuerte Bereiche zum Anzeigen von Benachrichtigungssymbolen und Benachrichtigungsinformationen für den Benutzer. Wenn eine Benachrichtigung zum ersten Mal veröffentlicht wird, wird das Symbol im Infobereich angezeigt, wie im folgenden Screenshot dargestellt:

Beispielbenachrichtigungsbereich auf einem Gerät

Um Details zur Benachrichtigung zu erhalten, kann der Benutzer die Benachrichtigungsschublade öffnen (wodurch jedes Benachrichtigungssymbol erweitert wird, um Benachrichtigungsinhalte anzuzeigen) und alle Aktionen auszuführen, die den Benachrichtigungen zugeordnet sind. Der folgende Screenshot zeigt eine Benachrichtigungsschublade , die dem oben angezeigten Benachrichtigungsbereich entspricht:

Beispiel für eine Benachrichtigungsschublade mit drei Benachrichtigungen

Android-Benachrichtigungen verwenden zwei Arten von Layouts:

  • Basislayout – ein kompaktes, festes Präsentationsformat.

  • Erweitertes Layout – ein Präsentationsformat, das auf eine größere Größe erweitert werden kann, um weitere Informationen anzuzeigen.

Jeder dieser Layouttypen (und deren Erstellung) wird in den folgenden Abschnitten erläutert.

Hinweis

Dieser Leitfaden konzentriert sich auf die NotificationCompat-APIs aus der Android-Supportbibliothek. Diese APIs stellen eine maximale Abwärtskompatibilität mit Android 4.0 (API-Ebene 14) sicher.

Basislayout

Alle Android-Benachrichtigungen basieren auf dem Basislayoutformat, das mindestens die folgenden Elemente enthält:

  1. Ein Benachrichtigungssymbol, das die ursprüngliche App darstellt, oder der Benachrichtigungstyp, wenn die App unterschiedliche Arten von Benachrichtigungen unterstützt.

  2. Der Benachrichtigungstitel oder der Name des Absenders, wenn die Benachrichtigung eine persönliche Nachricht ist.

  3. Die Benachrichtigung.

  4. Ein Zeitstempel.

Diese Elemente werden wie im folgenden Diagramm dargestellt angezeigt:

Speicherort von Benachrichtigungselementen

Basislayouts sind auf 64 dichteunabhängige Pixel (dp) in der Höhe begrenzt. Android erstellt standardmäßig diesen grundlegenden Benachrichtigungsstil.

Optional können Benachrichtigungen ein großes Symbol anzeigen, das die Anwendung oder das Foto des Absenders darstellt. Wenn ein großes Symbol in einer Benachrichtigung in Android 5.0 und höher verwendet wird, wird das kleine Benachrichtigungssymbol als Signal über dem großen Symbol angezeigt:

Einfaches Benachrichtigungsfoto

Ab Android 5.0 können Benachrichtigungen auch auf dem Sperrbildschirm angezeigt werden:

Beispiel für eine Sperrbildschirmbenachrichtigung

Der Benutzer kann auf die Sperrbildschirmbenachrichtigung doppeltippen, um das Gerät zu entsperren und zu der App zu springen, die diese Benachrichtigung stammt, oder wischen Sie, um die Benachrichtigung zu schließen. Apps können die Sichtbarkeitsebene einer Benachrichtigung festlegen, um zu steuern, was auf dem Sperrbildschirm angezeigt wird, und Benutzer können auswählen, ob vertrauliche Inhalte in Sperrbildschirmbenachrichtigungen angezeigt werden sollen.

Android 5.0 hat ein Präsentationsformat mit hoher Priorität namens Heads-up eingeführt. Kopf-up-Benachrichtigungen gleiten einige Sekunden vom oberen Bildschirmrand nach unten und kehren dann wieder in den Infobereich zurück:

Beispiel für head-up-Benachrichtigung

Head-up-Benachrichtigungen ermöglichen es der Systembenutzeroberfläche, wichtige Informationen vor dem Benutzer zu platzieren, ohne den Zustand der aktuell ausgeführten Aktivität zu unterbrechen.

Android bietet Unterstützung für Benachrichtigungsmetadaten, sodass Benachrichtigungen intelligent sortiert und angezeigt werden können. Benachrichtigungsmetadaten steuern außerdem, wie Benachrichtigungen auf dem Sperrbildschirm und im Heads-up-Format dargestellt werden. Anwendungen können die folgenden Arten von Benachrichtigungsmetadaten festlegen:

  • Priorität – Die Prioritätsstufe bestimmt, wie und wann Benachrichtigungen angezeigt werden. In Android 5.0 werden beispielsweise Benachrichtigungen mit hoher Priorität als Heads-up-Benachrichtigungen angezeigt.

  • Sichtbarkeit – Gibt an, wie viel Benachrichtigungsinhalt angezeigt werden soll, wenn die Benachrichtigung auf dem Sperrbildschirm angezeigt wird.

  • Kategorie – Informiert das System, wie die Benachrichtigung unter verschiedenen Umständen behandelt wird, z. B. wenn sich das Gerät im Modus "Nicht stören" befindet.

Hinweis

Sichtbarkeit und Kategorie wurden in Android 5.0 eingeführt und sind in früheren Versionen von Android nicht verfügbar. Ab Android 8.0 werden Benachrichtigungskanäle verwendet, um zu steuern, wie Benachrichtigungen dem Benutzer präsentiert werden.

Erweiterte Layouts

Ab Android 4.1 können Benachrichtigungen mit erweiterten Layoutstilen konfiguriert werden, mit denen der Benutzer die Höhe der Benachrichtigung erweitern kann, um weitere Inhalte anzuzeigen. Im folgenden Beispiel wird beispielsweise eine erweiterte Layoutbenachrichtigung im Vertragsmodus veranschaulicht:

Vertragliche Benachrichtigung

Wenn diese Benachrichtigung erweitert wird, wird die gesamte Nachricht angezeigt:

Erweiterte Benachrichtigung

Android unterstützt drei erweiterte Layoutstile für Einzelereignisbenachrichtigungen:

  • Big Text – Zeigt im Vertragsmodus einen Auszug der ersten Zeile der Nachricht gefolgt von zwei Punkten an. Zeigt im erweiterten Modus die gesamte Meldung an (wie im obigen Beispiel dargestellt).

  • Posteingang – Zeigt im Vertragsmodus die Anzahl der neuen Nachrichten an. Zeigt im erweiterten Modus die erste E-Mail-Nachricht oder eine Liste der Nachrichten im Posteingang an.

  • Bild – Zeigt im Vertragsmodus nur den Nachrichtentext an. Zeigt im erweiterten Modus den Text und ein Bild an.

Über die Grundlegende Benachrichtigung hinaus (weiter unten in diesem Artikel) wird erläutert, wie Sie Big Text-, Posteingangs- und Bildbenachrichtigungen erstellen.

Benachrichtigungskanäle

Ab Android 8.0 (Oreo) können Sie das Feature für Benachrichtigungskanäle verwenden, um einen vom Benutzer anpassbaren Kanal für jeden Typ von Benachrichtigungen zu erstellen, den Sie anzeigen möchten. Benachrichtigungskanäle ermöglichen es Ihnen, Benachrichtigungen zu gruppieren, sodass alle in einem Kanal geposteten Benachrichtigungen das gleiche Verhalten aufweisen. Sie können beispielsweise über einen Benachrichtigungskanal verfügen, der für Benachrichtigungen vorgesehen ist, die sofortige Aufmerksamkeit erfordern, und einen separaten "ruhigeren" Kanal, der für Informationsnachrichten verwendet wird.

Die mit Android Oreo installierte YouTube-App listet zwei Benachrichtigungskategorien auf: Downloadbenachrichtigungen und allgemeine Benachrichtigungen:

Benachrichtigungsbildschirme für YouTube in Android Oreo

Jede dieser Kategorien entspricht einem Benachrichtigungskanal. Die YouTube-App implementiert einen Kanal "Downloadbenachrichtigungen" und einen Kanal "Allgemeine Benachrichtigungen". Der Benutzer kann auf Downloadbenachrichtigungen tippen, wodurch der Einstellungsbildschirm für den Kanal "Downloadbenachrichtigungen" der App angezeigt wird:

Bildschirm

Auf diesem Bildschirm kann der Benutzer das Verhalten des Kanals "Downloadbenachrichtigungen " wie folgt ändern:

  • Legen Sie die Wichtigkeitsstufe auf "Dringend", "Hoch", "Mittel" oder "Niedrig" fest, wodurch der Sound- und visuelle Unterbrechungspegel konfiguriert wird.

  • Aktivieren oder deaktivieren Sie den Benachrichtigungspunkt.

  • Schalten Sie das blinkende Licht ein oder aus.

  • Benachrichtigungen auf dem Sperrbildschirm ein- oder ausblenden.

  • Überschreiben Sie die Einstellung "Nicht stören" .

Der Kanal "Allgemeine Benachrichtigungen" hat ähnliche Einstellungen:

Bildschirm

Beachten Sie, dass Sie keine absolute Kontrolle darüber haben, wie Ihre Benachrichtigungskanäle mit dem Benutzer interagieren – der Benutzer kann die Einstellungen für jeden Benachrichtigungskanal auf dem Gerät ändern, wie in den screenshots oben dargestellt. Sie können jedoch Standardwerte konfigurieren (wie unten beschrieben). Wie diese Beispiele veranschaulichen, ermöglicht Ihnen das neue Benachrichtigungskanäle-Feature, benutzern eine präzise Kontrolle über verschiedene Arten von Benachrichtigungen zu geben.

Benachrichtigungserstellung

Zum Erstellen einer Benachrichtigung in Android verwenden Sie die NotificationCompat.Builder-Klasse aus dem Xamarin.Android.Support.v4 NuGet-Paket. Diese Klasse ermöglicht das Erstellen und Veröffentlichen von Benachrichtigungen in älteren Versionen von Android. NotificationCompat.Builder wird ebenfalls erörtert.

NotificationCompat.Builder stellt Methoden zum Festlegen der verschiedenen Optionen in einer Benachrichtigung bereit, z. B.:

  • Der Inhalt, einschließlich des Titels, des Nachrichtentexts und des Benachrichtigungssymbols.

  • Der Stil der Benachrichtigung, z . B. "Großer Text", "Posteingang" oder "Bild ".

  • Die Priorität der Benachrichtigung: minimum, low, default, high, or maximum. Unter Android 8.0 und höher wird die Priorität über einen Benachrichtigungskanal festgelegt.

  • Die Sichtbarkeit der Benachrichtigung auf dem Sperrbildschirm: öffentlich, privat oder geheim.

  • Kategoriemetadaten, mit denen Android die Benachrichtigung klassifizieren und filtern kann.

  • Eine optionale Absicht, die angibt, dass eine Aktivität gestartet wird, wenn die Benachrichtigung angetippt wird.

  • Die ID des Benachrichtigungskanals, auf dem die Benachrichtigung veröffentlicht wird (Android 8.0 und höher).

Nachdem Sie diese Optionen im Generator festgelegt haben, generieren Sie ein Benachrichtigungsobjekt, das die Einstellungen enthält. Um die Benachrichtigung zu veröffentlichen, übergeben Sie dieses Benachrichtigungsobjekt an den Notification Manager. Android stellt die NotificationManager-Klasse bereit, die für die Veröffentlichung von Benachrichtigungen und die Anzeige für den Benutzer verantwortlich ist. Ein Verweis auf diese Klasse kann aus einem beliebigen Kontext abgerufen werden, z. B. aus einer Aktivität oder einem Dienst.

Erstellen eines Benachrichtigungskanals

Apps, die unter Android 8.0 ausgeführt werden, müssen einen Benachrichtigungskanal für ihre Benachrichtigungen erstellen. Für einen Benachrichtigungskanal sind die folgenden drei Informationen erforderlich:

  • Eine ID-Zeichenfolge, die für das Paket eindeutig ist, das den Kanal identifiziert.
  • Der Name des Kanals, der dem Benutzer angezeigt wird. Der Name muss zwischen 1 und 40 Zeichen bestehen.
  • Die Bedeutung des Kanals.

Apps müssen die Version von Android überprüfen, die sie ausführen. Geräte mit Versionen, die älter als Android 8.0 sind, sollten keinen Benachrichtigungskanal erstellen. Die folgende Methode ist ein Beispiel für das Erstellen eines Benachrichtigungskanals in einer Aktivität:

void CreateNotificationChannel()
{
    if (Build.VERSION.SdkInt < BuildVersionCodes.O)
    {
        // Notification channels are new in API 26 (and not a part of the
        // support library). There is no need to create a notification
        // channel on older versions of Android.
        return;
    }

    var channelName = Resources.GetString(Resource.String.channel_name);
    var channelDescription = GetString(Resource.String.channel_description);
    var channel = new NotificationChannel(CHANNEL_ID, channelName, NotificationImportance.Default)
                  {
                      Description = channelDescription
                  };

    var notificationManager = (NotificationManager) GetSystemService(NotificationService);
    notificationManager.CreateNotificationChannel(channel);
}

Der Benachrichtigungskanal sollte jedes Mal erstellt werden, wenn die Aktivität erstellt wird. Für die CreateNotificationChannel Methode sollte sie in der OnCreate Methode einer Aktivität aufgerufen werden.

Erstellen und Veröffentlichen einer Benachrichtigung

Führen Sie die folgenden Schritte aus, um eine Benachrichtigung in Android zu generieren:

  1. Instanziieren Sie ein NotificationCompat.Builder-Objekt.

  2. Rufen Sie verschiedene Methoden für das NotificationCompat.Builder Objekt auf, um Benachrichtigungsoptionen festzulegen.

  3. Rufen Sie die Build-Methode des NotificationCompat.Builder Objekts auf, um ein Benachrichtigungsobjekt zu instanziieren.

  4. Rufen Sie die Notify-Methode des Benachrichtigungs-Managers auf, um die Benachrichtigung zu veröffentlichen.

Sie müssen mindestens die folgenden Informationen für jede Benachrichtigung angeben:

  • Ein kleines Symbol (24 x 24 dp in der Größe)

  • Kurzer Titel

  • Der Text der Benachrichtigung

Im folgenden Codebeispiel wird veranschaulicht, wie sie zum Generieren einer einfachen Benachrichtigung verwendet werden NotificationCompat.Builder . Beachten Sie, dass NotificationCompat.Builder Methoden die Methodenkette unterstützen. Das heißt, jede Methode gibt das Generatorobjekt zurück, sodass Sie das Ergebnis des letzten Methodenaufrufs verwenden können, um den nächsten Methodenaufruf aufzurufen:

// Instantiate the builder and set notification elements:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
    .SetContentTitle ("Sample Notification")
    .SetContentText ("Hello World! This is my first notification!")
    .SetSmallIcon (Resource.Drawable.ic_notification);

// Build the notification:
Notification notification = builder.Build();

// Get the notification manager:
NotificationManager notificationManager =
    GetSystemService (Context.NotificationService) as NotificationManager;

// Publish the notification:
const int notificationId = 0;
notificationManager.Notify (notificationId, notification);

In diesem Beispiel wird ein neues NotificationCompat.Builder aufgerufenes builder Objekt instanziiert, zusammen mit der ID des zu verwendenden Benachrichtigungskanals. Der Titel und der Text der Benachrichtigung werden festgelegt, und das Benachrichtigungssymbol wird aus Ressourcen/zeichnend/ic_notification.png geladen. Der Aufruf der Methode des Benachrichtigungs-Generators Build erstellt ein Benachrichtigungsobjekt mit diesen Einstellungen. Der nächste Schritt besteht darin, die Notify Methode des Benachrichtigungs-Managers aufzurufen. Um den Benachrichtigungs-Manager zu finden, rufen GetSystemServiceSie auf, wie oben dargestellt.

Die Notify Methode akzeptiert zwei Parameter: den Benachrichtigungsbezeichner und das Benachrichtigungsobjekt. Der Benachrichtigungsbezeichner ist eine eindeutige ganze Zahl, die die Benachrichtigung für Ihre Anwendung identifiziert. In diesem Beispiel wird der Benachrichtigungsbezeichner auf Null (0) festgelegt; In einer Produktionsanwendung möchten Sie jedoch jeder Benachrichtigung einen eindeutigen Bezeichner zugeben. Durch erneutes Verwenden des vorherigen Bezeichnerwerts in einem Aufruf Notify wird die letzte Benachrichtigung überschrieben.

Wenn dieser Code auf einem Android 5.0-Gerät ausgeführt wird, wird eine Benachrichtigung generiert, die wie im folgenden Beispiel aussieht:

Benachrichtigungsergebnis für den Beispielcode

Das Benachrichtigungssymbol wird auf der linken Seite der Benachrichtigung angezeigt – dieses Bild eines eingekreisten "i" weist einen Alphakanal auf, damit Android einen grauen kreisförmigen Hintergrund hinter der Benachrichtigung zeichnen kann. Sie können auch ein Symbol ohne Alphakanal angeben. Informationen zum Anzeigen eines fotografischen Bilds als Symbol finden Sie weiter unten in diesem Thema unter "Großes Symbolformat ".

Der Zeitstempel wird automatisch festgelegt, Sie können diese Einstellung jedoch überschreiben, indem Sie die SetWhen-Methode des Benachrichtigungs-Generators aufrufen. Im folgenden Codebeispiel wird beispielsweise der Zeitstempel auf die aktuelle Uhrzeit festgelegt:

builder.SetWhen (Java.Lang.JavaSystem.CurrentTimeMillis());

Aktivieren von Sound und Vibration

Wenn Ihre Benachrichtigung auch einen Sound wiedergeben soll, können Sie die SetDefaults-Methode des Benachrichtigungs-Generators aufrufen und das NotificationDefaults.Sound Flag übergeben:

// Instantiate the notification builder and enable sound:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
    .SetContentTitle ("Sample Notification")
    .SetContentText ("Hello World! This is my first notification!")
    .SetDefaults (NotificationDefaults.Sound)
    .SetSmallIcon (Resource.Drawable.ic_notification);

Durch diesen Aufruf SetDefaults wird das Gerät beim Veröffentlichen der Benachrichtigung einen Sound wiedergeben. Wenn Sie möchten, dass das Gerät vibriert, anstatt einen Sound wiederzugeben, können Sie an SetDefaults. übergeben, wenn das Gerät einen Sound wiedergeben und das Gerät vibrieren soll, können Sie beide Flags SetDefaultsan folgendes übergebenNotificationDefaults.Vibrate:

builder.SetDefaults (NotificationDefaults.Sound | NotificationDefaults.Vibrate);

Wenn Sie Sound aktivieren, ohne einen wiedergegebenen Sound anzugeben, verwendet Android den standardmäßigen Systembenachrichtigungssound. Sie können jedoch den Sound ändern, der wiedergegeben wird, indem Sie die SetSound-Methode des Benachrichtigungs-Generators aufrufen. Um beispielsweise den Alarmsound mit Ihrer Benachrichtigung wiederzugeben (anstelle des Standardbenachrichtigungssounds), können Sie den URI für den Alarmsound aus dem RingtoneManager abrufen und an SetSoundfolgendes übergeben:

builder.SetSound (RingtoneManager.GetDefaultUri(RingtoneType.Alarm));

Alternativ können Sie den standardmäßigen Klingelton des Systems für Ihre Benachrichtigung verwenden:

builder.SetSound (RingtoneManager.GetDefaultUri(RingtoneType.Ringtone));

Nachdem Sie ein Benachrichtigungsobjekt erstellt haben, ist es möglich, Benachrichtigungseigenschaften für das Benachrichtigungsobjekt festzulegen (anstatt sie im Voraus über NotificationCompat.Builder Methoden zu konfigurieren). Anstatt beispielsweise die SetDefaults Methode zum Aktivieren von Vibrationen in einer Benachrichtigung aufzurufen, können Sie das Bit-Flag der Defaults-Eigenschaft der Benachrichtigung direkt ändern:

// Build the notification:
Notification notification = builder.Build();

// Turn on vibrate:
notification.Defaults |= NotificationDefaults.Vibrate;

In diesem Beispiel wird das Gerät vibrieren, wenn die Benachrichtigung veröffentlicht wird.

Aktualisieren einer Benachrichtigung

Wenn Sie den Inhalt einer Benachrichtigung aktualisieren möchten, nachdem sie veröffentlicht wurde, können Sie das vorhandene NotificationCompat.Builder Objekt wiederverwenden, um ein neues Benachrichtigungsobjekt zu erstellen und diese Benachrichtigung mit dem Bezeichner der letzten Benachrichtigung zu veröffentlichen. Zum Beispiel:

// Update the existing notification builder content:
builder.SetContentTitle ("Updated Notification");
builder.SetContentText ("Changed to this message.");

// Build a notification object with updated content:
notification = builder.Build();

// Publish the new notification with the existing ID:
notificationManager.Notify (notificationId, notification);

In diesem Beispiel wird das vorhandene NotificationCompat.Builder Objekt verwendet, um ein neues Benachrichtigungsobjekt mit einem anderen Titel und einer anderen Nachricht zu erstellen. Das neue Benachrichtigungsobjekt wird mithilfe des Bezeichners der vorherigen Benachrichtigung veröffentlicht und aktualisiert den Inhalt der zuvor veröffentlichten Benachrichtigung:

Aktualisierte Benachrichtigung

Der Textkörper der vorherigen Benachrichtigung wird wiederverwendet – nur der Titel und der Text der Benachrichtigung ändert sich, während die Benachrichtigung im Benachrichtigungsschublade angezeigt wird. Der Titeltext wechselt von "Beispielbenachrichtigung" in "Aktualisierte Benachrichtigung" und der Nachrichtentext von "Hallo Welt! Dies ist meine erste Benachrichtigung!" in "In diese Nachricht geändert".

Eine Benachrichtigung wird erneut angezeigt Standard bis eine von drei Dingen passiert:

  • Der Benutzer schließt die Benachrichtigung (oder tippt auf "Alle löschen").

  • Die Anwendung ruft auf NotificationManager.Cancelund übergibt die eindeutige Benachrichtigungs-ID, die beim Veröffentlichen der Benachrichtigung zugewiesen wurde.

  • Die Anwendung ruft auf NotificationManager.CancelAll.

Weitere Informationen zum Aktualisieren von Android-Benachrichtigungen finden Sie unter Ändern einer Benachrichtigung.

Starten einer Aktivität aus einer Benachrichtigung

In Android ist es üblich, dass eine Benachrichtigung einer Aktion zugeordnet wird – eine Aktivität, die gestartet wird, wenn der Benutzer auf die Benachrichtigung tippt. Diese Aktivität kann sich in einer anderen Anwendung oder sogar in einer anderen Aufgabe befinden. Um einer Benachrichtigung eine Aktion hinzuzufügen, erstellen Sie ein PendingIntent-Objekt und ordnen die PendingIntent Benachrichtigung zu. A PendingIntent ist eine spezielle Absichtsart, mit der die Empfängeranwendung einen vordefinierten Codeabschnitt mit den Berechtigungen der sendenden Anwendung ausführen kann. Wenn der Benutzer auf die Benachrichtigung tippt, startet Android die durch die PendingIntent.

Der folgende Codeausschnitt veranschaulicht, wie eine Benachrichtigung mit einer PendingIntent Benachrichtigung erstellt wird, die die Aktivität der ursprünglichen App startet: MainActivity

// Set up an intent so that tapping the notifications returns to this app:
Intent intent = new Intent (this, typeof(MainActivity));

// Create a PendingIntent; we're only using one PendingIntent (ID = 0):
const int pendingIntentId = 0;
PendingIntent pendingIntent =
    PendingIntent.GetActivity (this, pendingIntentId, intent, PendingIntentFlags.OneShot);

// Instantiate the builder and set notification elements, including pending intent:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
    .SetContentIntent (pendingIntent)
    .SetContentTitle ("Sample Notification")
    .SetContentText ("Hello World! This is my first action notification!")
    .SetSmallIcon (Resource.Drawable.ic_notification);

// Build the notification:
Notification notification = builder.Build();

// Get the notification manager:
NotificationManager notificationManager =
    GetSystemService (Context.NotificationService) as NotificationManager;

// Publish the notification:
const int notificationId = 0;
notificationManager.Notify (notificationId, notification);

Dieser Code ist dem Benachrichtigungscode im vorherigen Abschnitt sehr ähnlich, mit der Ausnahme, dass dem Benachrichtigungsobjekt ein PendingIntent Objekt hinzugefügt wird. In diesem Beispiel wird die PendingIntent Aktivität der ursprünglichen App zugeordnet, bevor sie an die SetContentIntent-Methode des Benachrichtigungs-Generators übergeben wird. Das PendingIntentFlags.OneShot Flag wird an die PendingIntent.GetActivity Methode übergeben, sodass die PendingIntent Kennzeichnung nur einmal verwendet wird. Wenn dieser Code ausgeführt wird, wird die folgende Benachrichtigung angezeigt:

Erste Aktionsbenachrichtigung

Durch Tippen auf diese Benachrichtigung wird der Benutzer wieder zur ursprünglichen Aktivität zurück.

In einer Produktions-App muss Ihre App den Hintergrundstapel verarbeiten, wenn der Benutzer die Schaltfläche "Zurück " innerhalb der Benachrichtigungsaktivität drückt (wenn Sie mit Android-Aufgaben und dem Hintergrundstapel nicht vertraut sind, siehe Aufgaben und Hintergrundstapel). In den meisten Fällen sollte die Rückwärtsnavigation aus der Benachrichtigungsaktivität den Benutzer aus der App und zurück zum Startbildschirm zurückgeben. Zum Verwalten des Hintergrundstapels verwendet Ihre App die TaskStackBuilder-Klasse , um einen PendingIntent mit einem Hintergrundstapel zu erstellen.

Eine weitere reale Betrachtung ist, dass die ursprungsbezogene Aktivität möglicherweise Daten an die Benachrichtigungsaktivität senden muss. Die Benachrichtigung kann z. B. darauf hinweisen, dass eine Sms eingetroffen ist, und die Benachrichtigungsaktivität (ein Nachrichtenanzeigebildschirm) erfordert die ID der Nachricht, um die Nachricht dem Benutzer anzuzeigen. Die Aktivität, die erstellt wird, PendingIntent kann die Intent.PutExtra-Methode verwenden, um Daten (z. B. eine Zeichenfolge) zur Absicht hinzuzufügen, sodass diese Daten an die Benachrichtigungsaktivität übergeben werden.

Im folgenden Codebeispiel wird veranschaulicht, wie sie zum Verwalten des Hintergrundstapels verwendet TaskStackBuilder werden, und es enthält ein Beispiel für das Senden einer einzelnen Nachrichtenzeichenfolge an eine Benachrichtigungsaktivität, die aufgerufen wird SecondActivity:

// Setup an intent for SecondActivity:
Intent secondIntent = new Intent (this, typeof(SecondActivity));

// Pass some information to SecondActivity:
secondIntent.PutExtra ("message", "Greetings from MainActivity!");

// Create a task stack builder to manage the back stack:
TaskStackBuilder stackBuilder = TaskStackBuilder.Create(this);

// Add all parents of SecondActivity to the stack:
stackBuilder.AddParentStack (Java.Lang.Class.FromType (typeof (SecondActivity)));

// Push the intent that starts SecondActivity onto the stack:
stackBuilder.AddNextIntent (secondIntent);

// Obtain the PendingIntent for launching the task constructed by
// stackbuilder. The pending intent can be used only once (one shot):
const int pendingIntentId = 0;
PendingIntent pendingIntent =
    stackBuilder.GetPendingIntent (pendingIntentId, PendingIntentFlags.OneShot);

// Instantiate the builder and set notification elements, including
// the pending intent:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
    .SetContentIntent (pendingIntent)
    .SetContentTitle ("Sample Notification")
    .SetContentText ("Hello World! This is my second action notification!")
    .SetSmallIcon (Resource.Drawable.ic_notification);

// Build the notification:
Notification notification = builder.Build();

// Get the notification manager:
NotificationManager notificationManager =
    GetSystemService (Context.NotificationService) as NotificationManager;

// Publish the notification:
const int notificationId = 0;
notificationManager.Notify (notificationId, notification);

In diesem Codebeispiel besteht die App aus zwei Aktivitäten: MainActivity (die den obigen Benachrichtigungscode enthält) und SecondActivityden Bildschirm, den der Benutzer nach dem Tippen auf die Benachrichtigung sieht. Wenn dieser Code ausgeführt wird, wird eine einfache Benachrichtigung (ähnlich dem vorherigen Beispiel) dargestellt. Durch Tippen auf die Benachrichtigung gelangen Benutzer zum SecondActivity Bildschirm:

Screenshot der zweiten Aktivität

Die Zeichenfolgennachricht (die an die Methode der Absicht PutExtra übergeben wird) wird über diese Codezeile abgerufen SecondActivity :

// Get the message from the intent:
string message = Intent.Extras.GetString ("message", "");

Diese abgerufene Meldung "Begrüßungen aus MainActivity!" wird auf dem SecondActivity Bildschirm angezeigt, wie im obigen Screenshot gezeigt. Wenn der Benutzer die Zurück-Taste während der Navigation drückt SecondActivity, führt die Navigation aus der App und zurück zum Bildschirm vor dem Start der App.

Weitere Informationen zum Erstellen ausstehender Absichten finden Sie unter PendingIntent.

Über die grundlegende Benachrichtigung hinaus

Benachrichtigungen weisen standardmäßig ein einfaches Basislayoutformat in Android auf, aber Sie können dieses grundlegende Format verbessern, indem Sie zusätzliche NotificationCompat.Builder Methodenaufrufe ausführen. In diesem Abschnitt erfahren Sie, wie Sie Ihrer Benachrichtigung ein großes Fotosymbol hinzufügen, und Sie sehen Beispiele zum Erstellen erweiterter Layoutbenachrichtigungen.

Großes Symbolformat

Android-Benachrichtigungen zeigen in der Regel das Symbol der ursprünglichen App an (auf der linken Seite der Benachrichtigung). Benachrichtigungen können jedoch anstelle des standardmäßigen kleinen Symbols ein Bild oder ein Foto (ein großes Symbol) anzeigen. Beispielsweise könnte eine Messaging-App anstelle des App-Symbols ein Foto des Absenders anzeigen.

Hier ist ein Beispiel für eine einfache Android 5.0-Benachrichtigung – es zeigt nur das kleine App-Symbol an:

Beispiel für eine normale Benachrichtigung

Und hier ist ein Screenshot der Benachrichtigung, nachdem sie geändert wurde, um ein großes Symbol anzuzeigen – es verwendet ein Symbol, das aus einem Bild eines Xamarin-Codeaffen erstellt wurde:

Beispiel für eine große Symbolbenachrichtigung

Beachten Sie, dass das kleine App-Symbol, wenn eine Benachrichtigung im großen Symbolformat angezeigt wird, als Signal in der unteren rechten Ecke des großen Symbols angezeigt wird.

Um ein Bild als großes Symbol in einer Benachrichtigung zu verwenden, rufen Sie die SetLargeIcon-Methode des Benachrichtigungs-Generators auf und übergeben eine Bitmap des Bilds. Im Gegensatz dazu SetSmallIconSetLargeIcon akzeptiert nur eine Bitmap. Um eine Bilddatei in eine Bitmap zu konvertieren, verwenden Sie die BitmapFactory-Klasse . Zum Beispiel:

builder.SetLargeIcon (BitmapFactory.DecodeResource (Resources, Resource.Drawable.monkey_icon));

Dieser Beispielcode öffnet die Bilddatei unter Resources/drawable/monkey_icon.png, konvertiert sie in eine Bitmap und übergibt die resultierende Bitmap an NotificationCompat.Builder. In der Regel ist die Quellbildauflösung größer als das kleine Symbol – aber nicht viel größer. Ein Bild, das zu groß ist, kann unnötige Größenänderungsvorgänge verursachen, die das Veröffentlichen der Benachrichtigung verzögern könnten.

Formatvorlage für großen Text

Die Formatvorlage "Großer Text " ist eine erweiterte Layoutvorlage, die Sie zum Anzeigen langer Nachrichten in Benachrichtigungen verwenden. Wie alle erweiterten Layoutbenachrichtigungen wird die Big-Text-Benachrichtigung zunächst in einem kompakten Präsentationsformat angezeigt:

Beispiel für eine Benachrichtigung mit großem Text

In diesem Format wird nur ein Auszug der Nachricht angezeigt, der um zwei Punkte beendet wird. Wenn der Benutzer die Benachrichtigung nach unten zieht, wird er erweitert, um die gesamte Benachrichtigung anzuzeigen:

Erweiterte Big-Text-Benachrichtigung

Dieses erweiterte Layoutformat enthält auch Zusammenfassungstext am unteren Rand der Benachrichtigung. Die maximale Höhe der Big-Text-Benachrichtigung beträgt 256 dp.

Um eine Big-Text-Benachrichtigung zu erstellen, instanziieren Sie wie zuvor ein NotificationCompat.Builder Objekt, und instanziieren und fügen sie dem NotificationCompat.Builder Objekt ein BigTextStyle-Objekt hinzu. Hier ist ein Beispiel:

// Instantiate the Big Text style:
Notification.BigTextStyle textStyle = new Notification.BigTextStyle();

// Fill it with text:
string longTextMessage = "I went up one pair of stairs.";
longTextMessage += " / Just like me. ";
//...
textStyle.BigText (longTextMessage);

// Set the summary text:
textStyle.SetSummaryText ("The summary text goes here.");

// Plug this style into the builder:
builder.SetStyle (textStyle);

// Create the notification and publish it ...

In diesem Beispiel werden der Nachrichtentext und der Zusammenfassungstext im BigTextStyle Objekt (textStyle) gespeichert, bevor er an NotificationCompat.Builder.

Bildstil

Das Bildformat (auch als Big Picture-Format bezeichnet) ist ein erweitertes Benachrichtigungsformat, mit dem Sie ein Bild im Textkörper einer Benachrichtigung anzeigen können. Beispielsweise kann eine Screenshot-App oder eine Foto-App den Bildbenachrichtigungsstil verwenden, um dem Benutzer eine Benachrichtigung über das letzte aufgenommene Bild bereitzustellen. Beachten Sie, dass die maximale Höhe der Bildbenachrichtigung 256 dp beträgt – Android ändert die Größe des Bilds so, dass es in diese maximale Höheinschränkung passt, innerhalb der Grenzwerte des verfügbaren Arbeitsspeichers.

Wie alle erweiterten Layoutbenachrichtigungen werden Bildbenachrichtigungen zuerst in einem kompakten Format angezeigt, in dem ein Auszug des zugehörigen Nachrichtentexts angezeigt wird:

Kompakte Bildbenachrichtigung zeigt kein Bild an

Wenn der Benutzer die Bildbenachrichtigung nach unten zieht, wird es erweitert, um ein Bild anzuzeigen. Hier ist beispielsweise die erweiterte Version der vorherigen Benachrichtigung:

Erweiterte Bildbenachrichtigung zeigt das Bild an

Beachten Sie, dass beim Anzeigen der Benachrichtigung im kompakten Format Benachrichtigungstext (der Text, der an die Methode des Benachrichtigungs-Generators SetContentText übergeben wird, wie zuvor gezeigt) angezeigt wird. Wenn die Benachrichtigung jedoch erweitert wird, um das Bild anzuzeigen, wird der Zusammenfassungstext oberhalb des Bilds angezeigt.

Um eine Bildbenachrichtigung zu erstellen, instanziieren Sie ein NotificationCompat.Builder Objekt wie zuvor, und erstellen und fügen Sie dann ein BigPictureStyle-Objekt in das NotificationCompat.Builder Objekt ein. Zum Beispiel:

// Instantiate the Image (Big Picture) style:
Notification.BigPictureStyle picStyle = new Notification.BigPictureStyle();

// Convert the image to a bitmap before passing it into the style:
picStyle.BigPicture (BitmapFactory.DecodeResource (Resources, Resource.Drawable.x_bldg));

// Set the summary text that will appear with the image:
picStyle.SetSummaryText ("The summary text goes here.");

// Plug this style into the builder:
builder.SetStyle (picStyle);

// Create the notification and publish it ...

Wie bei der SetLargeIcon Methode erfordert NotificationCompat.Builderdie BigPicture-Methode BigPictureStyle eine Bitmap des Bilds, das im Textkörper der Benachrichtigung angezeigt werden soll. In diesem Beispiel liest die DecodeResource-Methode BitmapFactory die Bilddatei unter Resources/drawable/x_bldg.png und konvertiert sie in eine Bitmap.

Sie können auch Bilder anzeigen, die nicht als Ressource verpackt sind. Der folgende Beispielcode lädt z. B. ein Bild aus der lokalen SD-Karte und zeigt es in einer Bildbenachrichtigung an:

// Using the Image (Big Picture) style:
Notification.BigPictureStyle picStyle = new Notification.BigPictureStyle();

// Read an image from the SD card, subsample to half size:
BitmapFactory.Options options = new BitmapFactory.Options();
options.InSampleSize = 2;
string imagePath = "/sdcard/Pictures/my-tshirt.jpg";
picStyle.BigPicture (BitmapFactory.DecodeFile (imagePath, options));

// Set the summary text that will appear with the image:
picStyle.SetSummaryText ("Check out my new T-Shirt!");

// Plug this style into the builder:
builder.SetStyle (picStyle);

// Create notification and publish it ...

In diesem Beispiel wird die Bilddatei unter /sd Karte/Pictures/my-tshirt.jpg geladen, in die Hälfte der Originalgröße geändert und dann in eine Bitmap konvertiert, um sie in der Benachrichtigung zu verwenden:

Beispiel für ein T-Shirt-Bild in Benachrichtigung

Wenn Sie die Größe der Bilddatei im Voraus nicht kennen, empfiehlt es sich, den Aufruf von BitmapFactory.DecodeFile in einen Ausnahmehandler umzuschließen– OutOfMemoryError eine Ausnahme kann ausgelöst werden, wenn das Bild zu groß ist, damit Android die Größe ändern kann.

Weitere Informationen zum Laden und Decodieren großer Bitmapbilder finden Sie unter "Effizientes Laden großer Bitmaps".

Posteingangsformat

Das Posteingangsformat ist eine erweiterte Layoutvorlage, die für die Anzeige separater Textzeilen (z. B. eine E-Mail-Posteingangszusammenfassung) im Textkörper der Benachrichtigung vorgesehen ist. Die Benachrichtigung im Posteingangsformat wird zuerst in einem kompakten Format angezeigt:

Beispiel für eine kompakte Posteingangsbenachrichtigung

Wenn der Benutzer die Benachrichtigung nach unten zieht, wird er erweitert, um eine E-Mail-Zusammenfassung anzuzeigen, wie im folgenden Screenshot zu sehen ist:

Beispiel für erweiterte Posteingangsbenachrichtigung

Um eine Posteingangsbenachrichtigung zu erstellen, instanziieren Sie ein NotificationCompat.Builder Objekt wie zuvor, und fügen Sie dem NotificationCompat.BuilderInboxStyle-Objekt ein . Hier ist ein Beispiel:

// Instantiate the Inbox style:
Notification.InboxStyle inboxStyle = new Notification.InboxStyle();

// Set the title and text of the notification:
builder.SetContentTitle ("5 new messages");
builder.SetContentText ("chimchim@xamarin.com");

// Generate a message summary for the body of the notification:
inboxStyle.AddLine ("Cheeta: Bananas on sale");
inboxStyle.AddLine ("George: Curious about your blog post");
inboxStyle.AddLine ("Nikko: Need a ride to Evolve?");
inboxStyle.SetSummaryText ("+2 more");

// Plug this style into the builder:
builder.SetStyle (inboxStyle);

Um dem Textkörper der Benachrichtigung neue Textzeilen hinzuzufügen, rufen Sie die Addline-Methode des InboxStyle Objekts auf (die maximale Höhe der Posteingangsbenachrichtigung beträgt 256 dp). Beachten Sie, dass im Gegensatz zur Formatvorlage "Big Text " die Posteingangsart einzelne Textzeilen im Benachrichtigungstext unterstützt.

Sie können auch das Posteingangsformat für jede Benachrichtigung verwenden, die einzelne Textzeilen in einem erweiterten Format anzeigen muss. Beispielsweise kann der Posteingangsbenachrichtigungsstil verwendet werden, um mehrere ausstehende Benachrichtigungen in einer Zusammenfassungsbenachrichtigung zu kombinieren – Sie können eine einzelne Benachrichtigung im Posteingangsstil mit neuen Benachrichtigungszeilen aktualisieren (siehe oben aktualisieren eine Benachrichtigung), anstatt einen fortlaufenden Datenstrom neuer, meist ähnlicher Benachrichtigungen zu generieren.

Konfigurieren von Metadaten

NotificationCompat.Builder enthält Methoden, die Sie aufrufen können, um Metadaten zu Ihrer Benachrichtigung festzulegen, z. B. Priorität, Sichtbarkeit und Kategorie. Android verwendet diese Informationen zusammen mit den Einstellungen für Benutzereinstellungen, um zu bestimmen, wie und wann Benachrichtigungen angezeigt werden sollen.

Prioritätseinstellungen

Apps, die unter Android 7.1 und niedriger ausgeführt werden, müssen die Priorität direkt auf der Benachrichtigung selbst festlegen. Die Prioritätseinstellung einer Benachrichtigung bestimmt zwei Ergebnisse, wenn die Benachrichtigung veröffentlicht wird:

  • Wo die Benachrichtigung in Bezug auf andere Benachrichtigungen angezeigt wird. Beispielsweise werden Benachrichtigungen mit hoher Priorität oberhalb von Benachrichtigungen mit niedrigerer Priorität in der Benachrichtigungsschublade angezeigt, unabhängig davon, wann jede Benachrichtigung veröffentlicht wurde.

  • Gibt an, ob die Benachrichtigung im Heads-up-Benachrichtigungsformat (Android 5.0 und höher) angezeigt wird. Nur Benachrichtigungen mit hoher und maximaler Priorität werden als Heads-up-Benachrichtigungen angezeigt.

Xamarin.Android definiert die folgenden Enumerationen zum Festlegen der Benachrichtigungspriorität:

  • NotificationPriority.Max – Warnt den Benutzer vor einer dringenden oder kritischen Bedingung (z. B. eingehende Anrufe, Turn-by-Turn-Wegbeschreibungen oder Notfallwarnung). Auf Android 5.0- und höher-Geräten werden Benachrichtigungen mit maximaler Priorität im Heads-up-Format angezeigt.

  • NotificationPriority.High – Informiert den Benutzer über wichtige Ereignisse (z. B. wichtige E-Mails oder die Ankunft von Echtzeit-Chatnachrichten). Auf Android 5.0- und höher-Geräten werden Benachrichtigungen mit hoher Priorität im Heads-up-Format angezeigt.

  • NotificationPriority.Default – benachrichtigt den Nutzer über Bedingungen, die ein mittleres Maß an Bedeutung haben.

  • NotificationPriority.Low – Für nicht dringende Informationen, über die der Benutzer informiert werden muss (z. B. Softwareupdateerinnerungen oder Updates im sozialen Netzwerk).

  • NotificationPriority.Min – Für Hintergrundinformationen, die der Benutzer nur beim Anzeigen von Benachrichtigungen bemerkt (z. B. Standort- oder Wetterinformationen).

Rufen Sie zum Festlegen der Priorität einer Benachrichtigung die SetPriority-Methode des NotificationCompat.Builder Objekts auf, und übergeben Sie die Prioritätsebene. Zum Beispiel:

builder.SetPriority (NotificationPriority.High);

Im folgenden Beispiel wird die Benachrichtigung mit hoher Priorität "Eine wichtige Nachricht!" am oberen Rand der Benachrichtigungsschublade angezeigt:

Beispiel für eine Benachrichtigung mit hoher Priorität

Da dies eine Benachrichtigung mit hoher Priorität ist, wird sie auch als Heads-up-Benachrichtigung über dem aktuellen Aktivitätsbildschirm des Benutzers in Android 5.0 angezeigt:

Beispiel-Heads-up-Benachrichtigung

Im nächsten Beispiel wird die Benachrichtigung mit niedriger Priorität "Gedanken für den Tag" unter einer Benachrichtigung über den Akkustand höherer Priorität angezeigt:

Beispielbenachrichtigung mit niedriger Priorität

Da es sich bei der Benachrichtigung "Gedanken für den Tag" um eine Benachrichtigung mit niedriger Priorität handelt, zeigt Android sie nicht im Heads-up-Format an.

Hinweis

Unter Android 8.0 und höher bestimmt die Priorität des Benachrichtigungskanals und der Benutzereinstellungen die Priorität der Benachrichtigung.

Sichtbarkeitseinstellungen

Ab Android 5.0 ist die Sichtbarkeitseinstellung verfügbar, um zu steuern, wie viel Benachrichtigungsinhalt auf dem sicheren Sperrbildschirm angezeigt wird. Xamarin.Android definiert die folgenden Enumerationen zum Festlegen der Benachrichtigungssichtbarkeit:

  • NotificationVisibility.Public – Der vollständige Inhalt der Benachrichtigung wird auf dem sicheren Sperrbildschirm angezeigt.

  • NotificationVisibility.Private – Nur wichtige Informationen werden auf dem sicheren Sperrbildschirm angezeigt (z. B. das Benachrichtigungssymbol und der Name der App, die sie gepostet hat), aber die restlichen Details der Benachrichtigung sind ausgeblendet. Alle Benachrichtigungen sind standardmäßig auf NotificationVisibility.Private.

  • NotificationVisibility.Secret – Auf dem sicheren Sperrbildschirm wird nichts angezeigt, nicht einmal das Benachrichtigungssymbol. Der Benachrichtigungsinhalt ist erst verfügbar, nachdem der Benutzer das Gerät entsperrt hat.

Um die Sichtbarkeit einer Benachrichtigung festzulegen, rufen Apps die SetVisibility Methode des NotificationCompat.Builder Objekts auf, und übergeben Sie die Sichtbarkeitseinstellung. Beispielsweise führt dieser Aufruf die SetVisibility Benachrichtigung Privateaus:

builder.SetVisibility (NotificationVisibility.Private);

Wenn eine Private Benachrichtigung bereitgestellt wird, wird nur der Name und das Symbol der App auf dem sicheren Sperrbildschirm angezeigt. Anstelle der Benachrichtigung sieht der Benutzer "Entsperren Ihres Geräts, um diese Benachrichtigung anzuzeigen":

Entsperren der Gerätebenachrichtigung

In diesem Beispiel ist NotificationsLab der Name der ursprünglichen App. Diese rotierte Version der Benachrichtigung wird nur angezeigt, wenn der Sperrbildschirm sicher ist (d. h. über PIN, Muster oder Kennwort gesichert) – wenn der Sperrbildschirm nicht sicher ist, ist der vollständige Inhalt der Benachrichtigung auf dem Sperrbildschirm verfügbar.

Kategorieeinstellungen

Ab Android 5.0 stehen vordefinierte Kategorien für Bewertungs- und Filterbenachrichtigungen zur Verfügung. Xamarin.Android stellt die folgenden Enumerationen für diese Kategorien bereit:

  • Notification.CategoryCall – Eingehender Telefonanruf.

  • Notification.CategoryMessage – Eingehende Textnachricht.

  • Notification.CategoryAlarm – Ein Alarmzustand oder Einlaufzeitpunkt.

  • Notification.CategoryEmail – Eingehende E-Mail-Nachricht.

  • Notification.CategoryEvent – Ein Kalenderereignis.

  • Notification.CategoryPromo – Eine Werbenachricht oder Werbung.

  • Notification.CategoryProgress – Der Fortschritt einer Hintergrundoperation.

  • Notification.CategorySocial – Update für soziale Netzwerke.

  • Notification.CategoryError – Fehler eines Hintergrundvorgangs oder Authentifizierungsprozesses.

  • Notification.CategoryTransport – Update der Medienwiedergabe.

  • Notification.CategorySystem – Reserviert für die Systemverwendung (System- oder Gerätestatus).

  • Notification.CategoryService – Gibt an, dass ein Hintergrunddienst ausgeführt wird.

  • Notification.CategoryRecommendation – Eine Empfehlungsmeldung im Zusammenhang mit der aktuell ausgeführten App.

  • Notification.CategoryStatus – Informationen zum Gerät.

Wenn Benachrichtigungen sortiert werden, hat die Priorität der Benachrichtigung Vorrang vor der Kategorieeinstellung. Beispielsweise wird eine Benachrichtigung mit hoher Priorität auch dann als Heads-up angezeigt, wenn sie zu der Promo Kategorie gehört. Um die Kategorie einer Benachrichtigung festzulegen, rufen Sie die SetCategory Methode des NotificationCompat.Builder Objekts auf und übergeben die Kategorieeinstellung. Zum Beispiel:

builder.SetCategory (Notification.CategoryCall);

Das Feature "Nicht stören " (neu in Android 5.0) filtert Benachrichtigungen basierend auf Kategorien. Der Bildschirm "Nicht stören" in Einstellungen ermöglicht dem Benutzer beispielsweise, Benachrichtigungen für Telefonanrufe und -nachrichten auszunehmen:

Bildschirmschalter nicht stören

Wenn der Benutzer "Nicht stören" konfiguriert, um alle Unterbrechungen außer Telefonanrufen zu blockieren (wie im obigen Screenshot dargestellt), ermöglicht Android Benachrichtigungen mit einer Kategorieeinstellung, die Notification.CategoryCall angezeigt werden soll, während sich das Gerät im Modus "Nicht stören" befindet. Beachten Sie, dass Notification.CategoryAlarm Benachrichtigungen nie im Modus "Nicht stören" blockiert werden.

Benachrichtigungsformatvorlagen

Zum Erstellen von Benachrichtigungen im Format "Big Text", "Image" oder "NotificationCompat.BuilderPosteingang" muss Ihre App die Kompatibilitätsversionen dieser Formatvorlagen verwenden. Um beispielsweise die Formatvorlage "Big Text " zu verwenden, instanziieren NotificationCompat.BigTextstyleSie Folgendes:

NotificationCompat.BigTextStyle textStyle = new NotificationCompat.BigTextStyle();

// Plug this style into the builder:
builder.SetStyle (textStyle);

Entsprechend kann Ihre App die Formatvorlagen "Posteingang" bzw NotificationCompat.BigPictureStyle. "Bild" verwenden.NotificationCompat.InboxStyle

Benachrichtigungspriorität und Kategorie

NotificationCompat.Builder unterstützt die SetPriority Methode (ab Android 4.1 verfügbar). Die SetCategory Methode wird jedoch nicht unterstützt NotificationCompat.Builder , da Kategorien Teil des neuen Benachrichtigungsmetadatensystems sind, das in Android 5.0 eingeführt wurde.

Um ältere Versionen von Android zu unterstützen, wo SetCategory nicht verfügbar ist, kann Ihr Code die API-Ebene zur Laufzeit überprüfen, um bedingt aufzurufen SetCategory , wenn die API-Ebene gleich oder größer als Android 5.0 ist (API-Ebene 21):

if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop) {
    builder.SetCategory (Notification.CategoryEmail);
}

In diesem Beispiel wird das Zielframework der App auf Android 5.0 festgelegt, und die mindeste Android-Version wird auf Android 4.1 (API-Ebene 16) festgelegt. Da SetCategory dieser Beispielcode in API-Ebene 21 und höher verfügbar ist, wird dieser Beispielcode nur aufgerufen SetCategory , wenn er verfügbar ist – er wird nicht aufgerufen SetCategory , wenn die API-Ebene kleiner als 21 ist.

Sichtbarkeit des Sperrbildschirms

Da Android sperrbildschirmbenachrichtigungen vor Android 5.0 (API-Ebene 21) nicht unterstützt hat, NotificationCompat.Builder wird die SetVisibility Methode nicht unterstützt. Wie oben SetCategoryerläutert, kann Ihr Code die API-Ebene zur Laufzeit überprüfen und nur aufrufen SetVisiblity , wenn er verfügbar ist:

if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop) {
    builder.SetVisibility (Notification.Public);
}

Zusammenfassung

In diesem Artikel wird erläutert, wie Lokale Benachrichtigungen in Android erstellt werden. Es wurde die Anatomie einer Benachrichtigung beschrieben, es wurde erläutert, wie NotificationCompat.Builder Benachrichtigungen erstellt werden, wie Benachrichtigungen in großen Symbolen, Big Text, Bild und Posteingangsformaten formatiert werden, wie Benachrichtigungsmetadateneinstellungen wie Priorität, Sichtbarkeit und Kategorie festgelegt werden und wie eine Aktivität über eine Benachrichtigung gestartet wird. In diesem Artikel wird auch beschrieben, wie diese Benachrichtigungseinstellungen mit den neuen Heads-up-, Sperrbildschirm- und Nicht stören-Features funktionieren, die in Android 5.0 eingeführt wurden. Schließlich haben Sie gelernt, wie NotificationCompat.Builder Sie die Kompatibilität von Benachrichtigungen mit früheren Versionen von Android Standard beibehalten.

Richtlinien zum Entwerfen von Benachrichtigungen für Android finden Sie unter "Benachrichtigungen".