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:
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.Builder
zahrnout 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:
Když kliknete na tlačítko, měli byste si všimnout, že malá ikona pro oznámení se zobrazí v oznamovací oblasti:
Pokud potáhnete prstem dolů a zpřístupníte zásobník oznámení, mělo by se zobrazit 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:
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.