Bagikan melalui


Panduan - Menggunakan pemberitahuan lokal di Xamarin.Android

Panduan ini menunjukkan cara menggunakan pemberitahuan lokal di aplikasi Xamarin.Android. Ini menunjukkan dasar-dasar pembuatan dan penerbitan pemberitahuan lokal. Saat pengguna mengklik pemberitahuan di area pemberitahuan, pengguna memulai Aktivitas kedua.

Gambaran Umum

Dalam panduan ini, kami akan membuat aplikasi Android yang memunculkan pemberitahuan saat pengguna mengklik tombol dalam Aktivitas. Ketika pengguna mengklik pemberitahuan, pengguna meluncurkan Aktivitas kedua yang menampilkan berapa kali pengguna mengklik tombol di Aktivitas pertama.

Cuplikan layar berikut mengilustrasikan beberapa contoh aplikasi ini:

Contoh cuplikan layar dengan pemberitahuan

Catatan

Panduan ini berfokus pada API NotificationCompat dari pustaka dukungan Android. API ini akan memastikan kompatibilitas mundur maksimum ke Android 4.0 (API level 14).

Membuat proyek

Untuk memulai, mari kita buat proyek Android baru menggunakan templat Aplikasi Android. Mari kita sebut proyek ini LocalNotifications. (Jika Anda tidak terbiasa membuat proyek Xamarin.Android, lihat Halo, Android.)

Edit nilai/Strings.xml file sumber daya sehingga berisi dua sumber daya string tambahan yang akan digunakan saat waktunya untuk membuat saluran pemberitahuan:

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

Menambahkan paket Android.Support.V4 NuGet

Dalam panduan ini, kami menggunakan NotificationCompat.Builder untuk membangun pemberitahuan lokal kami. Seperti yang dijelaskan dalam Pemberitahuan Lokal, kita harus menyertakan Android Support Library v4 NuGet dalam proyek kita untuk menggunakan NotificationCompat.Builder.

Selanjutnya, mari kita edit MainActivity.cs dan tambahkan pernyataan berikut using sehingga jenis di Android.Support.V4.App tersedia untuk kode kita:

using Android.Support.V4.App;

Selain itu, kita harus memperjelas kepada pengkompilasi bahwa kita menggunakan Android.Support.V4.App versi TaskStackBuilder daripada versi .Android.App Tambahkan pernyataan berikut using untuk mengatasi ambiguitas apa pun:

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

Membuat saluran pemberitahuan

Selanjutnya, tambahkan metode ke MainActivity yang akan membuat saluran pemberitahuan (jika perlu):

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

OnCreate Perbarui metode untuk memanggil metode baru ini:

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

    CreateNotificationChannel();
}

Tentukan ID pemberitahuan

Kami akan memerlukan ID unik untuk saluran pemberitahuan dan pemberitahuan kami. Mari kita edit MainActivity.cs dan tambahkan variabel instans statis berikut ke MainActivity kelas :

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

Menambahkan kode untuk menghasilkan pemberitahuan

Selanjutnya, kita perlu membuat penanganan aktivitas baru untuk peristiwa tombol Click . Tambahkan metode berikut ke 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++;
}

Metode OnCreate MainActivity harus melakukan panggilan untuk membuat saluran pemberitahuan dan menetapkan ButtonOnClick metode ke Click peristiwa tombol (ganti penanganan aktivitas delegasi yang disediakan oleh templat):

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

Membuat aktivitas kedua

Sekarang kita perlu membuat aktivitas lain yang akan ditampilkan Android ketika pengguna mengklik pemberitahuan kita. Tambahkan Aktivitas Android lain ke proyek Anda yang disebut SecondActivity. Buka SecondActivity.cs dan ganti kontennya dengan kode ini:

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

Kita juga harus membuat tata letak sumber daya untuk SecondActivity. Tambahkan file Tata Letak Android baru ke proyek Anda yang disebut Second.axml. Edit Second.axml dan tempelkan kode tata letak berikut:

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

Menambahkan ikon pemberitahuan

Terakhir, tambahkan ikon kecil yang akan muncul di area pemberitahuan saat pemberitahuan diluncurkan. Anda dapat menyalin ikon ini ke proyek Anda atau membuat ikon kustom Anda sendiri. Beri nama file ikon ic_stat_button_click.png dan salin ke folder Sumber Daya/yang dapat digambar. Ingatlah untuk menggunakan Tambahkan > Item yang Ada ... untuk menyertakan file ikon ini dalam proyek Anda.

Jalankan aplikasi

Membuat dan menjalankan aplikasi. Anda harus disajikan dengan aktivitas pertama, mirip dengan cuplikan layar berikut:

Cuplikan layar aktivitas pertama

Saat Mengeklik tombol, Anda akan melihat bahwa ikon kecil untuk pemberitahuan muncul di area pemberitahuan:

Ikon pemberitahuan muncul

Jika Anda menggesek ke bawah dan mengekspos laci pemberitahuan, Anda akan melihat pemberitahuan:

Pesan pemberitahuan

Ketika Anda mengklik pemberitahuan, pemberitahuan akan hilang, dan aktivitas kami yang lain harus diluncurkan - terlihat agak seperti cuplikan layar berikut:

Cuplikan layar aktivitas kedua

Selamat! Pada titik ini Anda telah menyelesaikan panduan pemberitahuan lokal Android dan Anda memiliki sampel kerja yang dapat Anda rujuk. Ada lebih banyak pemberitahuan daripada yang telah kami tampilkan di sini, jadi jika Anda ingin informasi lebih lanjut, lihat dokumentasi Google tentang pemberitahuan.

Ringkasan

Panduan ini digunakan NotificationCompat.Builder untuk membuat dan menampilkan pemberitahuan. Ini menunjukkan contoh dasar tentang cara memulai Aktivitas kedua sebagai cara untuk menanggapi interaksi pengguna dengan pemberitahuan, dan menunjukkan transfer data dari Aktivitas pertama ke Aktivitas kedua.