Sdílet prostřednictvím


Návod – Použití místních oznámení v Xamarin.Androidu

Tento názorný postup ukazuje, jak používat místní oznámení v aplikacích Xamarin.Android. Ukazuje základy vytváření a publikování místního oznámení. Když uživatel klikne na oznámení v oznamovací oblasti, spustí se druhá aktivita.

Přehled

V tomto názorném postupu vytvoříme aplikaci pro Android, která vyvolá oznámení, když uživatel klikne na tlačítko v aktivitě. Když uživatel klikne na oznámení, spustí druhou aktivitu, která zobrazí, kolikrát uživatel klikl na tlačítko v první aktivitě.

Následující snímky obrazovky znázorňují některé příklady této aplikace:

Ukázkové snímky obrazovky s oznámením

Poznámka:

Tato příručka se zaměřuje na rozhraní API NotificationCompat z knihovny podpory Pro Android. Tato rozhraní API zajistí maximální zpětnou kompatibilitu s Androidem 4.0 (úroveň rozhraní API 14).

Vytvoření projektu

Začněme tím, že pomocí šablony aplikace pro Android vytvoříme nový projekt pro Android. Pojďme volat tento projekt LocalNotifications. (Pokud nevíte, jak vytvářet projekty Xamarin.Android, přečtěte si téma Dobrý den, Android.)

Upravte hodnoty nebo Strings.xml souboru prostředků tak, aby obsahoval dva další řetězcové prostředky, které se použijí, když je čas vytvořit kanál oznámení:

<?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>

Přidání balíčku NuGet pro Android.Support.V4

V tomto názorném postupu používáme NotificationCompat.Builder k sestavení místního oznámení. Jak je vysvětleno v místních oznámeních, musíme do našeho projektu NotificationCompat.Builderzahrnout NuGet podpory androidu v4 .

V dalším kroku upravíme MainActivity.cs a přidáme následující using příkaz, aby byly typy Android.Support.V4.App dostupné pro náš kód:

using Android.Support.V4.App;

Také musíme kompilátoru vyčistit, že používáme Android.Support.V4.App verzi, nikoli Android.App verziTaskStackBuilder. Přidejte následující using příkaz pro vyřešení jakékoli nejednoznačnosti:

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

Vytvoření kanálu oznámení

Dále přidejte metodu MainActivity , která vytvoří kanál oznámení (v případě potřeby):

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

Aktualizujte metodu OnCreate tak, aby volala tuto novou metodu:

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

    CreateNotificationChannel();
}

Definování ID oznámení

Pro kanál oznámení a oznámení budeme potřebovat jedinečné ID. Pojďme upravit MainActivity.cs a přidat do MainActivity třídy následující statickou proměnnou instance:

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

Přidání kódu pro vygenerování oznámení

Dále musíme vytvořit novou obslužnou rutinu události pro událost tlačítka Click . Přidejte následující metodu:MainActivity

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++;
}

OnCreate Metoda MainActivity musí volat vytvoření kanálu oznámení a přiřadit ButtonOnClick metodu k Click události tlačítka (nahraďte obslužnou rutinu události delegáta poskytnutou šablonou):

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

Vytvoření druhé aktivity

Teď potřebujeme vytvořit další aktivitu, která se zobrazí, když uživatel klikne na naše oznámení. Přidejte do projektu další aktivitu Androidu s názvem SecondActivity. Otevřete SecondActivity.cs a nahraďte jeho obsah tímto kódem:

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.";
        }
    }
}

Musíme také vytvořit rozložení prostředků pro SecondActivity. Přidejte do projektu nový soubor rozložení androidu s názvem Second.axml. Upravte second.axml a vložte následující kód rozložení:

<?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>

Ikona Přidat oznámení

Nakonec přidejte malou ikonu, která se zobrazí v oznamovací oblasti při spuštění oznámení. Tuto ikonu můžete zkopírovat do projektu nebo vytvořit vlastní ikonu. Pojmenujte soubor ikony ic_stat_button_click.png a zkopírujte ho do složky Resources/drawable . Nezapomeňte použít přidat > existující položku ... k zahrnutí tohoto souboru ikony do projektu.

Spuštění aplikace

Sestavte a spusťte aplikaci. Měla by se zobrazit první aktivita, podobně jako na následujícím snímku obrazovky:

Snímek obrazovky s první aktivitou

Když kliknete na tlačítko, měli byste si všimnout, že malá ikona pro oznámení se zobrazí v oznamovací oblasti:

Zobrazí se ikona oznámení.

Pokud potáhnete prstem dolů a zpřístupníte zásobník oznámení, mělo by se zobrazit oznámení:

Oznámení

Když kliknete na oznámení, mělo by zmizet a měla by se spustit naše další aktivita – vypadá nějak takto:

Snímek obrazovky druhé aktivity

Gratulujeme! V tuto chvíli jste dokončili návod k místnímu oznámení androidu a máte funkční ukázku, na kterou můžete odkazovat. Existuje mnohem více oznámení, než jsme zde ukázali, takže pokud chcete více informací, podívejte se do dokumentace Googlu o oznámeních.

Shrnutí

Tento názorný postup slouží NotificationCompat.Builder k vytváření a zobrazování oznámení. Ukázal základní příklad toho, jak spustit druhou aktivitu jako způsob reakce na interakci uživatele s oznámením a ukázal přenos dat z první aktivity do druhé aktivity.