Exemplarische Vorgehensweise: Verwenden lokaler Benachrichtigungen in Xamarin.Android

In dieser exemplarischen Vorgehensweise wird veranschaulicht, wie Sie lokale Benachrichtigungen in Xamarin.Android-Anwendungen verwenden. Es veranschaulicht die Grundlagen des Erstellens und Veröffentlichens einer lokalen Benachrichtigung. Wenn der Benutzer im Benachrichtigungsbereich auf die Benachrichtigung klickt, wird eine zweite Aktivität gestartet.

Übersicht

In dieser exemplarischen Vorgehensweise erstellen wir eine Android-Anwendung, die eine Benachrichtigung auslöst, wenn der Benutzer in einer Aktivität auf eine Schaltfläche klickt. Wenn der Benutzer auf die Benachrichtigung klickt, wird eine zweite Aktivität gestartet, die anzeigt, wie oft der Benutzer in der ersten Aktivität auf die Schaltfläche geklickt hat.

Die folgenden Screenshots veranschaulichen einige Beispiele für diese Anwendung:

Beispielfotos mit Benachrichtigung

Hinweis

Dieser Leitfaden konzentriert sich auf die NotificationCompat-APIs aus der Android-Supportbibliothek. Diese APIs gewährleisten maximale Abwärtskompatibilität zu Android 4.0 (API-Ebene 14).

Erstellen des Projekts

Zunächst erstellen wir ein neues Android-Projekt mithilfe der Vorlage Android-App . Nennen wir dieses Projekt LocalNotifications. (Wenn Sie nicht mit dem Erstellen von Xamarin.Android-Projekten vertraut sind, lesen Sie Hello, Android.)

Bearbeiten Sie die Werte der Ressourcendatei/Strings.xml so, dass sie zwei zusätzliche Zeichenfolgenressourcen enthält, die beim Erstellen des Benachrichtigungskanals verwendet werden:

<?xml version="1.0" encoding="utf-8"?>

<resources>
  <string name="Hello">Hello World, Click Me!</string>
  <string name="ApplicationName">Notifications</string>

  <string name="channel_name">Local Notifications</string>
  <string name="channel_description">The count from MainActivity.</string>
</resources>

Hinzufügen des NuGet-Pakets "Android.Support.V4"

In dieser exemplarischen Vorgehensweise erstellen NotificationCompat.Builder wir unsere lokale Benachrichtigung. Wie unter Lokale Benachrichtigungen erläutert, müssen wir die Android-Supportbibliothek v4 NuGet in unser Projekt einschließen, um zu verwenden NotificationCompat.Builder.

Als Nächstes bearbeiten wir MainActivity.cs und fügen die folgende using Anweisung hinzu, damit die Typen in Android.Support.V4.App für unseren Code verfügbar sind:

using Android.Support.V4.App;

Außerdem müssen wir dem Compiler klarmachen, dass wir die Android.Support.V4.App Version von TaskStackBuilder und nicht die Android.App Version verwenden. Fügen Sie die folgende using Anweisung hinzu, um Mehrdeutigkeiten zu beheben:

using TaskStackBuilder = Android.Support.V4.App.TaskStackBuilder;

Erstellen des Benachrichtigungskanals

Fügen Sie als Nächstes eine Methode hinzu, die MainActivity einen Benachrichtigungskanal (falls erforderlich) erstellt:

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 name = Resources.GetString(Resource.String.channel_name);
    var description = GetString(Resource.String.channel_description);
    var channel = new NotificationChannel(CHANNEL_ID, name, NotificationImportance.Default)
                  {
                      Description = description
                  };

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

Aktualisieren Sie die OnCreate -Methode, um diese neue Methode aufzurufen:

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    SetContentView(Resource.Layout.Main);

    CreateNotificationChannel();
}

Definieren der Benachrichtigungs-ID

Wir benötigen eine eindeutige ID für unseren Benachrichtigungs- und Benachrichtigungskanal. Bearbeiten Sie MainActivity.cs, und fügen Sie der Klasse die MainActivity folgende statische instance-Variable hinzu:

static readonly int NOTIFICATION_ID = 1000;
static readonly string CHANNEL_ID = "location_notification";
internal static readonly string COUNT_KEY = "count";

Hinzufügen von Code zum Generieren der Benachrichtigung

Als Nächstes müssen wir einen neuen Ereignishandler für das Schaltflächenereignis Click erstellen. Fügen Sie MainActivity zur folgenden Methode hinzu:

void ButtonOnClick(object sender, EventArgs eventArgs)
{
    // Pass the current button press count value to the next activity:
    var valuesForActivity = new Bundle();
    valuesForActivity.PutInt(COUNT_KEY, count);

    // When the user clicks the notification, SecondActivity will start up.
    var resultIntent = new Intent(this, typeof(SecondActivity));

    // Pass some values to SecondActivity:
    resultIntent.PutExtras(valuesForActivity);

    // Construct a back stack for cross-task navigation:
    var stackBuilder = TaskStackBuilder.Create(this);
    stackBuilder.AddParentStack(Class.FromType(typeof(SecondActivity)));
    stackBuilder.AddNextIntent(resultIntent);

    // Create the PendingIntent with the back stack:
    var resultPendingIntent = stackBuilder.GetPendingIntent(0, (int) PendingIntentFlags.UpdateCurrent);

    // Build the notification:
    var builder = new NotificationCompat.Builder(this, CHANNEL_ID)
                  .SetAutoCancel(true) // Dismiss the notification from the notification area when the user clicks on it
                  .SetContentIntent(resultPendingIntent) // Start up this activity when the user clicks the intent.
                  .SetContentTitle("Button Clicked") // Set the title
                  .SetNumber(count) // Display the count in the Content Info
                  .SetSmallIcon(Resource.Drawable.ic_stat_button_click) // This is the icon to display
                  .SetContentText($"The button has been clicked {count} times."); // the message to display.

    // Finally, publish the notification:
    var notificationManager = NotificationManagerCompat.From(this);
    notificationManager.Notify(NOTIFICATION_ID, builder.Build());

    // Increment the button press count:
    count++;
}

Die OnCreate MainActivity-Methode muss den Aufruf ausführen, um den Benachrichtigungskanal zu erstellen und die ButtonOnClick Methode dem Click Ereignis der Schaltfläche zuzuweisen (ersetzen Sie den von der Vorlage bereitgestellten Delegatenereignishandler):

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    SetContentView(Resource.Layout.Main);

    CreateNotificationChannel();

    // Display the "Hello World, Click Me!" button and register its event handler:
    var button = FindViewById<Button>(Resource.Id.MyButton);
    button.Click += ButtonOnClick;
}

Erstellen einer zweiten Aktivität

Nun müssen wir eine weitere Aktivität erstellen, die Android anzeigt, wenn der Benutzer auf unsere Benachrichtigung klickt. Fügen Sie Ihrem Projekt eine weitere Android-Aktivität mit dem Namen SecondActivity hinzu. Öffnen Sie SecondActivity.cs , und ersetzen Sie den Inhalt durch diesen Code:

using System;
using Android.App;
using Android.OS;
using Android.Widget;

namespace LocalNotifications
{
    [Activity(Label = "Second Activity")]
    public class SecondActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Get the count value passed to us from MainActivity:
            var count = Intent.Extras.GetInt(MainActivity.COUNT_KEY, -1);

            // No count was passed? Then just return.
            if (count <= 0)
            {
                return;
            }

            // Display the count sent from the first activity:
            SetContentView(Resource.Layout.Second);
            var txtView = FindViewById<TextView>(Resource.Id.textView1);
            txtView.Text = $"You clicked the button {count} times in the previous activity.";
        }
    }
}

Wir müssen auch ein Ressourcenlayout für SecondActivity erstellen. Fügen Sie Ihrem Projekt eine neue Android-Layoutdatei mit dem Namen Second.axml hinzu. Bearbeiten Sie Second.axml , und fügen Sie den folgenden Layoutcode ein:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:minWidth="25px"
    android:minHeight="25px">
    <TextView
        android:text=""
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView1" />
</LinearLayout>

Hinzufügen eines Benachrichtigungssymbols

Fügen Sie abschließend ein kleines Symbol hinzu, das im Benachrichtigungsbereich angezeigt wird, wenn die Benachrichtigung gestartet wird. Sie können dieses Symbol in Ihr Projekt kopieren oder Ein eigenes benutzerdefiniertes Symbol erstellen. Benennen Sie die Symboldatei ic_stat_button_click.png , und kopieren Sie sie in den Ordner Resources/drawable . Denken Sie daran, vorhandenes Element hinzufügen > ... zu verwenden, um diese Symboldatei in Ihr Projekt einzuschließen.

Ausführen der Anwendung

Erstellen Sie die Anwendung, und führen Sie sie aus. Die erste Aktivität sollte angezeigt werden, ähnlich dem folgenden Screenshot:

Screenshot der ersten Aktivität

Wenn Sie auf die Schaltfläche klicken, sollten Sie feststellen, dass das kleine Symbol für die Benachrichtigung im Benachrichtigungsbereich angezeigt wird:

Benachrichtigungssymbol wird angezeigt

Wenn Sie nach unten wischen und die Benachrichtigungsschublade verfügbar machen, sollte die Benachrichtigung angezeigt werden:

Benachrichtigungsmeldung

Wenn Sie auf die Benachrichtigung klicken, sollte sie ausgeblendet werden, und unsere andere Aktivität sollte gestartet werden – ähnlich wie der folgende Screenshot:

Screenshot der zweiten Aktivität

Herzlichen Glückwunsch! An diesem Punkt haben Sie die exemplarische Vorgehensweise für lokale Android-Benachrichtigungen abgeschlossen, und Sie haben ein funktionierendes Beispiel, auf das Sie verweisen können. Es gibt viel mehr Benachrichtigungen, als wir hier gezeigt haben. Wenn Sie also weitere Informationen benötigen, sehen Sie sich die Google-Dokumentation zu Benachrichtigungen an.

Zusammenfassung

Diese exemplarische Vorgehensweise wird zum Erstellen und Anzeigen von Benachrichtigungen verwendet NotificationCompat.Builder . Es zeigte ein grundlegendes Beispiel für das Starten einer zweiten Aktivität als Reaktion auf Benutzerinteraktion mit der Benachrichtigung, und es wurde die Übertragung von Daten von der ersten Aktivität zur zweiten Aktivität veranschaulicht.