Bagikan melalui


Pemberitahuan lokal di Android

Bagian ini menunjukkan cara menerapkan pemberitahuan lokal di Xamarin.Android. Ini menjelaskan berbagai elemen UI dari pemberitahuan Android dan membahas API yang terlibat dengan membuat dan menampilkan pemberitahuan.

Gambaran umum pemberitahuan lokal

Android menyediakan dua area yang dikontrol sistem untuk menampilkan ikon pemberitahuan dan informasi pemberitahuan kepada pengguna. Saat pemberitahuan pertama kali diterbitkan, ikonnya ditampilkan di area pemberitahuan, seperti yang ditunjukkan pada cuplikan layar berikut:

Contoh area pemberitahuan pada perangkat

Untuk mendapatkan detail tentang pemberitahuan, pengguna dapat membuka laci pemberitahuan (yang memperluas setiap ikon pemberitahuan untuk mengungkapkan konten pemberitahuan) dan melakukan tindakan apa pun yang terkait dengan pemberitahuan. Cuplikan layar berikut menunjukkan laci pemberitahuan yang sesuai dengan area pemberitahuan yang ditampilkan di atas:

Contoh laci pemberitahuan yang menampilkan tiga pemberitahuan

Pemberitahuan Android menggunakan dua jenis tata letak:

  • Tata letak dasar – format presentasi yang ringkas dan tetap.

  • Tata letak yang diperluas – format presentasi yang dapat diperluas ke ukuran yang lebih besar untuk mengungkapkan informasi selengkapnya.

Masing-masing jenis tata letak ini (dan cara membuatnya) dijelaskan di bagian berikut.

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).

Tata letak dasar

Semua pemberitahuan Android dibangun pada format tata letak dasar, yang, minimal, mencakup elemen berikut:

  1. Ikon pemberitahuan, yang mewakili aplikasi asal, atau jenis pemberitahuan jika aplikasi mendukung berbagai jenis pemberitahuan.

  2. Judul pemberitahuan, atau nama pengirim jika pemberitahuan adalah pesan pribadi.

  3. Pesan pemberitahuan.

  4. Tanda waktu.

Elemen-elemen ini ditampilkan seperti yang diilustrasikan dalam diagram berikut:

Lokasi elemen pemberitahuan

Tata letak dasar dibatasi hingga 64 piksel independen kepadatan (dp) dalam tinggi. Android membuat gaya pemberitahuan dasar ini secara default.

Secara opsional, pemberitahuan dapat menampilkan ikon besar yang mewakili aplikasi atau foto pengirim. Saat ikon besar digunakan dalam pemberitahuan di Android 5.0 dan yang lebih baru, ikon pemberitahuan kecil ditampilkan sebagai lencana di atas ikon besar:

Foto pemberitahuan sederhana

Dimulai dengan Android 5.0, pemberitahuan juga dapat muncul di layar kunci:

Contoh pemberitahuan layar kunci

Pengguna dapat mengetuk dua kali pemberitahuan layar kunci untuk membuka kunci perangkat dan melompat ke aplikasi yang berasal dari pemberitahuan tersebut, atau menggesek untuk menutup pemberitahuan. Aplikasi dapat mengatur tingkat visibilitas pemberitahuan untuk mengontrol apa yang ditampilkan di layar kunci, dan pengguna dapat memilih apakah akan mengizinkan konten sensitif ditampilkan di pemberitahuan layar kunci.

Android 5.0 memperkenalkan format presentasi pemberitahuan berprioritas tinggi yang disebut Heads-up. Pemberitahuan head-up meluncur ke bawah dari bagian atas layar selama beberapa detik lalu mundur kembali ke area pemberitahuan:

Contoh pemberitahuan heads-up

Pemberitahuan heads-up memungkinkan UI sistem untuk menempatkan informasi penting di depan pengguna tanpa mengganggu status aktivitas yang sedang berjalan.

Android menyertakan dukungan untuk metadata pemberitahuan sehingga pemberitahuan dapat diurutkan dan ditampilkan secara cerdas. Metadata pemberitahuan juga mengontrol bagaimana pemberitahuan disajikan di layar kunci dan dalam format Heads-up. Aplikasi dapat mengatur jenis metadata pemberitahuan berikut:

  • Prioritas – Tingkat prioritas menentukan bagaimana dan kapan pemberitahuan disajikan. Misalnya, Di Android 5.0, pemberitahuan berprioritas tinggi ditampilkan sebagai pemberitahuan Heads-up.

  • Visibilitas – Menentukan berapa banyak konten pemberitahuan yang akan ditampilkan saat pemberitahuan muncul di layar kunci.

  • Kategori – Memberi tahu sistem cara menangani pemberitahuan dalam berbagai keadaan, seperti ketika perangkat dalam mode Jangan Diganggu .

Catatan

Visibilitas dan Kategori diperkenalkan di Android 5.0 dan tidak tersedia di versi Android sebelumnya. Dimulai dengan Android 8.0, saluran pemberitahuan digunakan untuk mengontrol bagaimana pemberitahuan disajikan kepada pengguna.

Tata letak yang diperluas

Dimulai dengan Android 4.1, pemberitahuan dapat dikonfigurasi dengan gaya tata letak yang diperluas yang memungkinkan pengguna memperluas tinggi pemberitahuan untuk melihat lebih banyak konten. Misalnya, contoh berikut mengilustrasikan pemberitahuan tata letak yang diperluas dalam mode terkontraksi:

Pemberitahuan terkontraksi

Ketika pemberitahuan ini diperluas, pemberitahuan ini mengungkapkan seluruh pesan:

Pemberitahuan yang diperluas

Android mendukung tiga gaya tata letak yang diperluas untuk pemberitahuan peristiwa tunggal:

  • Teks Besar – Dalam mode terkontraksi, menampilkan kutipan baris pertama pesan diikuti oleh dua periode. Dalam mode diperluas, menampilkan seluruh pesan (seperti yang terlihat dalam contoh di atas).

  • Kotak masuk – Dalam mode terkontraksi, menampilkan jumlah pesan baru. Dalam mode diperluas, menampilkan pesan email pertama atau daftar pesan di kotak masuk.

  • Gambar – Dalam mode terkontraksi, hanya menampilkan teks pesan. Dalam mode diperluas, menampilkan teks dan gambar.

Di luar Pemberitahuan Dasar (nanti dalam artikel ini) menjelaskan cara membuat pemberitahuan Teks Besar, Kotak Masuk, dan Gambar .

Saluran notifikasi

Dimulai dengan Android 8.0 (Oreo), Anda dapat menggunakan fitur saluran pemberitahuan untuk membuat saluran yang dapat disesuaikan pengguna untuk setiap jenis pemberitahuan yang ingin Anda tampilkan. Saluran pemberitahuan memungkinkan Anda mengelompokkan pemberitahuan sehingga semua pemberitahuan yang diposting ke saluran menunjukkan perilaku yang sama. Misalnya, Anda mungkin memiliki saluran pemberitahuan yang ditujukan untuk pemberitahuan yang memerlukan perhatian segera, dan saluran "lebih tenang" terpisah yang digunakan untuk pesan informasi.

Aplikasi YouTube yang diinstal dengan Android Oreo mencantumkan dua kategori pemberitahuan: Unduh pemberitahuan dan Pemberitahuan umum:

Layar pemberitahuan untuk YouTube di Android Oreo

Masing-masing kategori ini sesuai dengan saluran pemberitahuan. Aplikasi YouTube mengimplementasikan saluran Pemberitahuan Unduhan dan saluran Pemberitahuan Umum. Pengguna dapat mengetuk Unduh pemberitahuan, yang menampilkan layar pengaturan untuk saluran pemberitahuan unduhan aplikasi:

Layar notifikasi unduhan untuk aplikasi YouTube

Di layar ini, pengguna dapat memodifikasi perilaku saluran Unduh pemberitahuan dengan melakukan hal berikut:

  • Atur tingkat Kepentingan ke Mendesak, Tinggi, Sedang, atau Rendah, yang mengonfigurasi tingkat gangguan suara dan visual.

  • Aktifkan atau nonaktifkan titik pemberitahuan.

  • Nyalakan atau matikan lampu berkedip.

  • Tampilkan atau sembunyikan pemberitahuan pada layar kunci.

  • Ambil alih pengaturan Jangan Diganggu .

Saluran Pemberitahuan Umum memiliki pengaturan serupa:

Layar pemberitahuan umum untuk aplikasi YouTube

Perhatikan bahwa Anda tidak memiliki kontrol mutlak atas bagaimana saluran pemberitahuan Anda berinteraksi dengan pengguna - pengguna dapat memodifikasi pengaturan untuk saluran pemberitahuan apa pun di perangkat seperti yang terlihat pada cuplikan layar di atas. Namun, Anda dapat mengonfigurasi nilai default (seperti yang akan dijelaskan di bawah). Seperti yang diilustrasikan oleh contoh-contoh ini, fitur saluran pemberitahuan baru memungkinkan Anda untuk memberi pengguna kontrol mencolok atas berbagai jenis pemberitahuan.

Pembuatan pemberitahuan

Untuk membuat pemberitahuan di Android, Anda menggunakan kelas NotificationCompat.Builder dari paket NuGet Xamarin.Android.Support.v4 . Kelas ini memungkinkan untuk membuat dan menerbitkan pemberitahuan pada versi Android yang lebih lama. NotificationCompat.Builder juga dibahas.

NotificationCompat.Builder menyediakan metode untuk mengatur berbagai opsi dalam pemberitahuan, seperti:

  • Konten, termasuk judul, teks pesan, dan ikon pemberitahuan.

  • Gaya pemberitahuan, seperti Teks Besar, Kotak Masuk, atau Gaya gambar .

  • Prioritas pemberitahuan: minimum, rendah, default, tinggi, atau maksimum. Di Android 8.0 dan yang lebih tinggi, prioritas diatur melalui saluran pemberitahuan.

  • Visibilitas pemberitahuan di layar kunci: publik, privat, atau rahasia.

  • Metadata kategori yang membantu Android mengklasifikasikan dan memfilter pemberitahuan.

  • Niat opsional yang menunjukkan aktivitas untuk diluncurkan saat pemberitahuan diketuk.

  • ID saluran pemberitahuan yang akan dipublikasikan pemberitahuan (Android 8.0 dan yang lebih tinggi).

Setelah Anda mengatur opsi ini di penyusun, Anda membuat objek pemberitahuan yang berisi pengaturan. Untuk menerbitkan pemberitahuan, Anda meneruskan objek pemberitahuan ini ke Manajer Pemberitahuan. Android menyediakan kelas NotificationManager , yang bertanggung jawab untuk menerbitkan pemberitahuan dan menampilkannya kepada pengguna. Referensi ke kelas ini dapat diperoleh dari konteks apa pun, seperti aktivitas atau layanan.

Membuat saluran pemberitahuan

Aplikasi yang berjalan di Android 8.0 harus membuat saluran pemberitahuan untuk pemberitahuan mereka. Saluran pemberitahuan memerlukan tiga informasi berikut:

  • String ID yang unik untuk paket yang akan mengidentifikasi saluran.
  • Nama saluran yang akan ditampilkan kepada pengguna. Nama harus antara satu dan 40 karakter.
  • Pentingnya saluran.

Aplikasi harus memeriksa versi Android yang mereka jalankan. Perangkat yang menjalankan versi yang lebih lama dari Android 8.0 tidak boleh membuat saluran pemberitahuan. Metode berikut adalah salah satu contoh cara membuat saluran pemberitahuan dalam aktivitas:

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

Saluran pemberitahuan harus dibuat setiap kali aktivitas dibuat. Untuk metode , CreateNotificationChannel itu harus dipanggil dalam OnCreate metode aktivitas.

Membuat dan menerbitkan pemberitahuan

Untuk membuat pemberitahuan di Android, ikuti langkah-langkah berikut:

  1. Membuat instans NotificationCompat.Builder objek.

  2. Panggil berbagai metode pada NotificationCompat.Builder objek untuk mengatur opsi pemberitahuan.

  3. Panggil metode NotificationCompat.Builder Build objek untuk membuat instans objek pemberitahuan.

  4. Panggil metode Beri tahu manajer pemberitahuan untuk menerbitkan pemberitahuan.

Anda harus memberikan setidaknya informasi berikut untuk setiap pemberitahuan:

  • Ikon kecil (ukuran 24x24 dp)

  • Judul pendek

  • Teks pemberitahuan

Contoh kode berikut mengilustrasikan cara menggunakan NotificationCompat.Builder untuk menghasilkan pemberitahuan dasar. Perhatikan bahwa NotificationCompat.Builder metode mendukung penautan metode; yaitu, setiap metode mengembalikan objek penyusun sehingga Anda dapat menggunakan hasil panggilan metode terakhir untuk memanggil panggilan metode berikutnya:

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

Dalam contoh ini, objek baru NotificationCompat.Builder yang disebut builder dibuat instans, bersama dengan ID saluran pemberitahuan yang akan digunakan. Judul dan teks pemberitahuan diatur, dan ikon pemberitahuan dimuat dari Sumber Daya/dapat digambar/ic_notification.png. Panggilan ke metode penyusun Build pemberitahuan membuat objek pemberitahuan dengan pengaturan ini. Langkah selanjutnya adalah memanggil Notify metode manajer pemberitahuan. Untuk menemukan manajer pemberitahuan, Anda memanggil GetSystemService, seperti yang ditunjukkan di atas.

Metode Notify ini menerima dua parameter: pengidentifikasi pemberitahuan dan objek pemberitahuan. Pengidentifikasi pemberitahuan adalah bilangan bulat unik yang mengidentifikasi pemberitahuan ke aplikasi Anda. Dalam contoh ini, pengidentifikasi pemberitahuan diatur ke nol (0); namun, dalam aplikasi produksi, Anda ingin memberi setiap pemberitahuan pengidentifikasi unik. Menggunakan kembali nilai pengidentifikasi sebelumnya dalam panggilan untuk Notify menyebabkan pemberitahuan terakhir ditimpa.

Saat kode ini berjalan pada perangkat Android 5.0, kode ini menghasilkan pemberitahuan yang terlihat seperti contoh berikut:

Hasil pemberitahuan untuk kode sampel

Ikon pemberitahuan ditampilkan di sisi kiri pemberitahuan - gambar "i" yang dilingkari ini memiliki saluran alfa sehingga Android dapat menggambar latar belakang melingkar abu-abu di belakangnya. Anda juga dapat menyediakan ikon tanpa saluran alfa. Untuk menampilkan gambar fotografi sebagai ikon, lihat Format Ikon Besar nanti dalam topik ini.

Tanda waktu diatur secara otomatis, tetapi Anda dapat mengambil alih pengaturan ini dengan memanggil metode SetWhen dari penyusun pemberitahuan. Misalnya, contoh kode berikut mengatur tanda waktu ke waktu saat ini:

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

Mengaktifkan suara dan getaran

Jika Anda ingin pemberitahuan Anda juga memutar suara, Anda dapat memanggil metode SetDefaults pembuat pemberitahuan dan meneruskan NotificationDefaults.Sound bendera:

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

Panggilan ini SetDefaults akan menyebabkan perangkat memutar suara saat pemberitahuan diterbitkan. Jika Anda ingin perangkat bergetar daripada memutar suara, Anda dapat meneruskan NotificationDefaults.Vibrate ke SetDefaults. Jika Anda ingin perangkat memutar suara dan bergetar perangkat, Anda dapat meneruskan kedua bendera ke SetDefaults:

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

Jika Anda mengaktifkan suara tanpa menentukan suara untuk diputar, Android menggunakan suara pemberitahuan sistem default. Namun, Anda dapat mengubah suara yang akan diputar dengan memanggil metode SetSound pembuat pemberitahuan. Misalnya, untuk memutar suara alarm dengan pemberitahuan Anda (alih-alih suara pemberitahuan default), Anda bisa mendapatkan URI untuk suara alarm dari RingtoneManager dan meneruskannya ke SetSound:

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

Atau, Anda dapat menggunakan suara nada dering default sistem untuk pemberitahuan Anda:

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

Setelah Anda membuat objek pemberitahuan, Dimungkinkan untuk mengatur properti pemberitahuan pada objek pemberitahuan (daripada mengonfigurasinya terlebih dahulu melalui NotificationCompat.Builder metode). Misalnya, alih-alih memanggil SetDefaults metode untuk mengaktifkan getaran pada pemberitahuan, Anda dapat langsung memodifikasi bendera bit properti Default pemberitahuan:

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

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

Contoh ini menyebabkan perangkat bergetar saat pemberitahuan diterbitkan.

Memperbarui pemberitahuan

Jika Anda ingin memperbarui konten pemberitahuan setelah diterbitkan, Anda dapat menggunakan kembali objek yang ada NotificationCompat.Builder untuk membuat objek pemberitahuan baru dan menerbitkan pemberitahuan ini dengan pengidentifikasi pemberitahuan terakhir. Contohnya:

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

Dalam contoh ini, objek yang ada NotificationCompat.Builder digunakan untuk membuat objek pemberitahuan baru dengan judul dan pesan yang berbeda. Objek pemberitahuan baru diterbitkan menggunakan pengidentifikasi pemberitahuan sebelumnya, dan ini memperbarui konten pemberitahuan yang diterbitkan sebelumnya:

Pemberitahuan yang diperbarui

Isi pemberitahuan sebelumnya digunakan kembali – hanya judul dan teks pemberitahuan yang berubah saat pemberitahuan ditampilkan di laci pemberitahuan. Teks judul berubah dari "Pemberitahuan Sampel" menjadi "Pemberitahuan Yang Diperbarui" dan teks pesan berubah dari "Halo Dunia! Ini adalah pemberitahuan pertama saya!" ke "Diubah ke pesan ini."

Pemberitahuan tetap terlihat hingga salah satu dari tiga hal terjadi:

  • Pengguna menutup pemberitahuan (atau mengetuk Hapus Semua).

  • Aplikasi melakukan panggilan ke NotificationManager.Cancel, meneruskan ID pemberitahuan unik yang ditetapkan saat pemberitahuan diterbitkan.

  • Aplikasi memanggil NotificationManager.CancelAll.

Untuk informasi selengkapnya tentang memperbarui pemberitahuan Android, lihat Mengubah Pemberitahuan.

Memulai aktivitas dari pemberitahuan

Di Android, pemberitahuan umum dikaitkan dengan tindakan – aktivitas yang diluncurkan saat pengguna mengetuk pemberitahuan. Aktivitas ini dapat berada di aplikasi lain atau bahkan di tugas lain. Untuk menambahkan tindakan ke pemberitahuan, Anda membuat objek PendingIntent dan mengaitkan PendingIntent dengan pemberitahuan. PendingIntent adalah jenis niat khusus yang memungkinkan aplikasi penerima menjalankan bagian kode yang telah ditentukan sebelumnya dengan izin aplikasi pengirim. Saat pengguna mengetuk pemberitahuan, Android memulai aktivitas yang ditentukan oleh PendingIntent.

Cuplikan kode berikut menggambarkan cara membuat pemberitahuan dengan PendingIntent yang akan meluncurkan aktivitas aplikasi asal, 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);

Kode ini sangat mirip dengan kode pemberitahuan di bagian sebelumnya, kecuali bahwa PendingIntent ditambahkan ke objek pemberitahuan. Dalam contoh ini, PendingIntent dikaitkan dengan aktivitas aplikasi asal sebelum diteruskan ke metode SetContentIntent pembuat pemberitahuan. Bendera PendingIntentFlags.OneShot diteruskan ke PendingIntent.GetActivity metode sehingga PendingIntent hanya digunakan sekali. Saat kode ini berjalan, pemberitahuan berikut ditampilkan:

Pemberitahuan tindakan pertama

Mengetuk pemberitahuan ini akan membawa pengguna kembali ke aktivitas asal.

Di aplikasi produksi, aplikasi Anda harus menangani tumpukan belakang saat pengguna menekan tombol Kembali dalam aktivitas pemberitahuan (jika Anda tidak terbiasa dengan tugas Android dan tumpukan belakang, lihat Tugas dan Tumpukan Belakang). Dalam kebanyakan kasus, menavigasi mundur dari aktivitas pemberitahuan harus mengembalikan pengguna dari aplikasi dan kembali ke layar Beranda. Untuk mengelola tumpukan belakang, aplikasi Anda menggunakan kelas TaskStackBuilder untuk membuat PendingIntent dengan tumpukan belakang.

Pertimbangan dunia nyata lainnya adalah bahwa aktivitas asal mungkin perlu mengirim data ke aktivitas pemberitahuan. Misalnya, pemberitahuan mungkin menunjukkan bahwa pesan teks telah tiba, dan aktivitas pemberitahuan (layar tampilan pesan), memerlukan ID pesan untuk menampilkan pesan kepada pengguna. Aktivitas yang membuat PendingIntent dapat menggunakan metode Intent.PutExtra untuk menambahkan data (misalnya, string) ke niat sehingga data ini diteruskan ke aktivitas pemberitahuan.

Sampel kode berikut mengilustrasikan cara menggunakan TaskStackBuilder untuk mengelola tumpukan belakang, dan menyertakan contoh cara mengirim string pesan tunggal ke aktivitas pemberitahuan yang disebut 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);

Dalam contoh kode ini, aplikasi terdiri dari dua aktivitas: MainActivity (yang berisi kode pemberitahuan di atas), dan SecondActivity, layar yang dilihat pengguna setelah mengetuk pemberitahuan. Saat kode ini dijalankan, pemberitahuan sederhana (mirip dengan contoh sebelumnya) disajikan. Mengetuk pemberitahuan akan membawa pengguna ke SecondActivity layar:

Cuplikan layar aktivitas kedua

Pesan string (diteruskan ke metode niat PutExtra ) diambil SecondActivity melalui baris kode ini:

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

Pesan yang diambil ini, "Salam dari MainActivity!," ditampilkan di SecondActivity layar, seperti yang ditunjukkan pada cuplikan layar di atas. Saat pengguna menekan tombol Kembali saat berada di SecondActivity, navigasi mengarah keluar dari aplikasi dan kembali ke layar sebelum peluncuran aplikasi.

Untuk informasi selengkapnya tentang membuat niat yang tertunda, lihat PendingIntent.

Di luar pemberitahuan dasar

Pemberitahuan default ke format tata letak dasar sederhana di Android, tetapi Anda dapat meningkatkan format dasar ini dengan melakukan panggilan metode tambahan NotificationCompat.Builder . Di bagian ini, Anda akan mempelajari cara menambahkan ikon foto besar ke pemberitahuan, dan Anda akan melihat contoh cara membuat pemberitahuan tata letak yang diperluas.

Format ikon besar

Pemberitahuan Android biasanya menampilkan ikon aplikasi asal (di sisi kiri pemberitahuan). Namun, pemberitahuan dapat menampilkan gambar atau foto ( ikon besar) alih-alih ikon kecil standar. Misalnya, aplikasi olahpesan dapat menampilkan foto pengirim daripada ikon aplikasi.

Berikut adalah contoh pemberitahuan Dasar Android 5.0 - hanya menampilkan ikon aplikasi kecil:

Contoh pemberitahuan normal

Dan berikut adalah cuplikan layar pemberitahuan setelah memodifikasinya untuk menampilkan ikon besar - ini menggunakan ikon yang dibuat dari gambar monyet kode Xamarin:

Contoh pemberitahuan ikon besar

Perhatikan bahwa ketika pemberitahuan disajikan dalam format ikon besar, ikon aplikasi kecil ditampilkan sebagai lencana di sudut kanan bawah ikon besar.

Untuk menggunakan gambar sebagai ikon besar dalam pemberitahuan, Anda memanggil metode SetLargeIcon penyusun pemberitahuan dan meneruskan bitmap gambar. Tidak seperti SetSmallIcon, SetLargeIcon hanya menerima bitmap. Untuk mengonversi file gambar menjadi bitmap, Anda menggunakan kelas BitmapFactory . Contohnya:

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

Contoh kode ini membuka file gambar di Resources/drawable/monkey_icon.png, mengonversinya menjadi bitmap, dan meneruskan bitmap yang dihasilkan ke NotificationCompat.Builder. Biasanya, resolusi gambar sumber lebih besar dari ikon kecil - tetapi tidak jauh lebih besar. Gambar yang terlalu besar dapat menyebabkan operasi mengubah ukuran yang tidak perlu yang dapat menunda posting pemberitahuan.

Gaya teks besar

Gaya Teks Besar adalah templat tata letak diperluas yang Anda gunakan untuk menampilkan pesan panjang dalam pemberitahuan. Seperti semua pemberitahuan tata letak yang diperluas, pemberitahuan Teks Besar awalnya ditampilkan dalam format presentasi yang ringkas:

Contoh pemberitahuan Teks Besar

Dalam format ini, hanya kutipan pesan yang ditampilkan, dihentikan oleh dua periode. Saat pengguna menyeret ke bawah pada pemberitahuan, pengguna akan meluas untuk mengungkapkan seluruh pesan pemberitahuan:

Pemberitahuan Teks Besar yang Diperluas

Format tata letak yang diperluas ini juga menyertakan teks ringkasan di bagian bawah pemberitahuan. Tinggi maksimum pemberitahuan Teks Besar adalah 256 dp.

Untuk membuat pemberitahuan Teks Besar, Anda membuat NotificationCompat.Builder instans objek, seperti sebelumnya, lalu membuat instans dan menambahkan objek BigTextStyle ke NotificationCompat.Builder objek. Berikut adalah contoh:

// 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 ...

Dalam contoh ini, teks pesan dan teks ringkasan disimpan dalam BigTextStyle objek (textStyle) sebelum diteruskan ke NotificationCompat.Builder.

Gaya gambar

Gaya Gambar (juga disebut gaya Big Picture ) adalah format pemberitahuan yang diperluas yang dapat Anda gunakan untuk menampilkan gambar dalam isi pemberitahuan. Misalnya, aplikasi cuplikan layar atau aplikasi foto dapat menggunakan gaya Pemberitahuan gambar untuk memberi pengguna pemberitahuan gambar terakhir yang diambil. Perhatikan bahwa tinggi maksimum pemberitahuan Gambar adalah 256 dp – Android akan mengubah ukuran gambar agar sesuai dengan pembatasan tinggi maksimum ini, dalam batas memori yang tersedia.

Seperti semua pemberitahuan tata letak yang diperluas, Pemberitahuan gambar pertama kali ditampilkan dalam format ringkas yang menampilkan kutipan teks pesan yang menyertainya:

Pemberitahuan gambar ringkas tidak menunjukkan gambar

Saat pengguna menyeret ke bawah pada pemberitahuan Gambar , pengguna akan meluas untuk mengungkapkan gambar. Misalnya, berikut adalah versi pemberitahuan sebelumnya yang diperluas:

Pemberitahuan gambar yang diperluas mengungkapkan gambar

Perhatikan bahwa ketika pemberitahuan ditampilkan dalam format ringkas, pemberitahuan akan menampilkan teks pemberitahuan (teks yang diteruskan ke metode penyusun SetContentText pemberitahuan, seperti yang ditunjukkan sebelumnya). Namun, ketika pemberitahuan diperluas untuk mengungkapkan gambar, pemberitahuan menampilkan teks ringkasan di atas gambar.

Untuk membuat pemberitahuan Gambar , Anda membuat NotificationCompat.Builder instans objek seperti sebelumnya, lalu membuat dan menyisipkan objek BigPictureStyle ke NotificationCompat.Builder dalam objek. Contohnya:

// 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 ...

SetLargeIcon Seperti metode NotificationCompat.Builder, metode BigPicture membutuhkan BigPictureStyle bitmap gambar yang ingin Anda tampilkan di isi pemberitahuan. Dalam contoh ini, metode BitmapFactory DecodeResource membaca file gambar yang terletak di Resources/drawable/x_bldg.png dan mengonversinya menjadi bitmap.

Anda juga dapat menampilkan gambar yang tidak dipaketkan sebagai sumber daya. Misalnya, kode sampel berikut memuat gambar dari kartu SD lokal dan menampilkannya dalam pemberitahuan Gambar :

// 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 ...

Dalam contoh ini, file gambar yang terletak di /sdcard/Pictures/my-tshirt.jpg dimuat, diubah ukurannya menjadi setengah dari ukuran aslinya, lalu dikonversi ke bitmap untuk digunakan dalam pemberitahuan:

Contoh gambar T-shirt dalam pemberitahuan

Jika Anda tidak tahu ukuran file gambar terlebih dahulu, ada baiknya untuk membungkus panggilan ke BitmapFactory.DecodeFile dalam handler pengecualian - OutOfMemoryError pengecualian mungkin dilemparkan jika gambar terlalu besar bagi Android untuk mengubah ukuran.

Untuk informasi selengkapnya tentang memuat dan mendekode gambar bitmap besar, lihat Memuat Bitmap Besar Secara Efisien.

Gaya kotak masuk

Format Kotak Masuk adalah templat tata letak yang diperluas yang dimaksudkan untuk menampilkan baris teks terpisah (seperti ringkasan kotak masuk email) di isi pemberitahuan. Pemberitahuan format Kotak Masuk pertama kali ditampilkan dalam format ringkas:

Contoh pemberitahuan kotak masuk ringkas

Saat pengguna menyeret ke bawah pada pemberitahuan, pengguna akan meluas untuk mengungkapkan ringkasan email seperti yang terlihat pada cuplikan layar di bawah ini:

Contoh pemberitahuan kotak masuk diperluas

Untuk membuat pemberitahuan Kotak Masuk , Anda membuat NotificationCompat.Builder instans objek, seperti sebelumnya, dan menambahkan objek InboxStyle ke NotificationCompat.Builder. Berikut adalah contoh:

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

Untuk menambahkan baris teks baru ke isi pemberitahuan, panggil metode Addline objek (tinggi maksimum pemberitahuan Kotak Masuk adalah 256 InboxStyle dp). Perhatikan bahwa, tidak seperti gaya Teks Besar, gaya Kotak Masuk mendukung baris teks individual di isi pemberitahuan.

Anda juga dapat menggunakan gaya Kotak Masuk untuk pemberitahuan apa pun yang perlu menampilkan baris teks individual dalam format yang diperluas. Misalnya, gaya pemberitahuan Kotak Masuk dapat digunakan untuk menggabungkan beberapa pemberitahuan yang tertunda ke dalam pemberitahuan ringkasan – Anda dapat memperbarui satu pemberitahuan gaya Kotak Masuk dengan baris konten pemberitahuan baru (lihat Memperbarui Pemberitahuan di atas), daripada menghasilkan aliran berkelanjutan pemberitahuan baru yang sebagian besar serupa.

Mengonfigurasi metadata

NotificationCompat.Builder menyertakan metode yang dapat Anda panggil untuk mengatur metadata tentang pemberitahuan Anda, seperti prioritas, visibilitas, dan kategori. Android menggunakan informasi ini — bersama dengan pengaturan preferensi pengguna — untuk menentukan cara dan waktu menampilkan pemberitahuan.

Pengaturan prioritas

Aplikasi yang berjalan di Android 7.1 dan yang lebih rendah perlu mengatur prioritas langsung pada pemberitahuan itu sendiri. Pengaturan prioritas pemberitahuan menentukan dua hasil saat pemberitahuan diterbitkan:

  • Di mana pemberitahuan muncul terkait dengan pemberitahuan lain. Misalnya, pemberitahuan prioritas tinggi disajikan di atas pemberitahuan prioritas yang lebih rendah di laci pemberitahuan, terlepas dari kapan setiap pemberitahuan diterbitkan.

  • Apakah pemberitahuan ditampilkan dalam format pemberitahuan Heads-up (Android 5.0 dan yang lebih baru). Hanya pemberitahuan prioritas tinggi dan maksimum yang ditampilkan sebagai pemberitahuan Heads-up.

Xamarin.Android mendefinisikan enumerasi berikut untuk mengatur prioritas pemberitahuan:

  • NotificationPriority.Max – Memberi tahu pengguna tentang kondisi mendesak atau kritis (misalnya, panggilan masuk, arah belokan demi belokan, atau pemberitahuan darurat). Di perangkat Android 5.0 dan yang lebih baru, pemberitahuan prioritas maksimum ditampilkan dalam format Heads-up.

  • NotificationPriority.High – Menginformasikan kepada pengguna peristiwa penting (seperti email penting atau kedatangan pesan obrolan real time). Di perangkat Android 5.0 dan yang lebih baru, pemberitahuan prioritas tinggi ditampilkan dalam format Heads-up.

  • NotificationPriority.Default – Memberi tahu pengguna tentang kondisi yang memiliki tingkat kepentingan sedang.

  • NotificationPriority.Low – Untuk informasi tidak mendesak yang perlu diinformasikan pengguna (misalnya, pengingat pembaruan perangkat lunak atau pembaruan jejaring sosial).

  • NotificationPriority.Min – Untuk informasi latar belakang yang dilihat pengguna hanya saat melihat pemberitahuan (misalnya, informasi lokasi atau cuaca).

Untuk mengatur prioritas pemberitahuan, panggil metode SetPriority objek NotificationCompat.Builder , meneruskan tingkat prioritas. Contohnya:

builder.SetPriority (NotificationPriority.High);

Dalam contoh berikut, pemberitahuan prioritas tinggi, "Pesan penting!" muncul di bagian atas laci pemberitahuan:

Contoh pemberitahuan berprioritas tinggi

Karena ini adalah pemberitahuan berprioritas tinggi, pemberitahuan juga ditampilkan sebagai pemberitahuan Heads-up di atas layar aktivitas pengguna saat ini di Android 5.0:

Contoh pemberitahuan Heads-up

Dalam contoh berikutnya, pemberitahuan "Dipikirkan untuk hari itu" berprioritas rendah ditampilkan di bawah pemberitahuan tingkat baterai berprioritas lebih tinggi:

Contoh pemberitahuan berprioritas rendah

Karena pemberitahuan "Dipikirkan untuk hari ini" adalah pemberitahuan berprioritas rendah, Android tidak akan menampilkannya dalam format Heads-up.

Catatan

Di Android 8.0 dan yang lebih tinggi, prioritas saluran pemberitahuan dan pengaturan pengguna akan menentukan prioritas pemberitahuan.

Pengaturan visibilitas

Dimulai dengan Android 5.0, pengaturan visibilitas tersedia untuk mengontrol berapa banyak konten pemberitahuan yang muncul di layar kunci aman. Xamarin.Android mendefinisikan enumerasi berikut untuk mengatur visibilitas pemberitahuan:

  • NotificationVisibility.Public – Konten lengkap pemberitahuan ditampilkan di layar kunci aman.

  • NotificationVisibility.Private – Hanya informasi penting yang ditampilkan di layar kunci aman (seperti ikon pemberitahuan dan nama aplikasi yang mempostingnya), tetapi detail pemberitahuan lainnya disembunyikan. Semua pemberitahuan default ke NotificationVisibility.Private.

  • NotificationVisibility.Secret – Tidak ada yang ditampilkan di layar kunci aman, bahkan tidak ada ikon pemberitahuan. Konten pemberitahuan hanya tersedia setelah pengguna membuka kunci perangkat.

Untuk mengatur visibilitas pemberitahuan, aplikasi memanggil SetVisibility metode NotificationCompat.Builder objek, meneruskan pengaturan visibilitas. Misalnya, panggilan ini untuk SetVisibility membuat pemberitahuan Private:

builder.SetVisibility (NotificationVisibility.Private);

Private Saat pemberitahuan diposting, hanya nama dan ikon aplikasi yang ditampilkan di layar kunci aman. Alih-alih pesan pemberitahuan, pengguna melihat "Buka kunci perangkat Anda untuk melihat pemberitahuan ini":

Membuka kunci pesan pemberitahuan perangkat Anda

Dalam contoh ini, NotificationsLab adalah nama aplikasi asal. Versi pemberitahuan yang diredaksi ini hanya muncul ketika layar Kunci aman (yaitu, diamankan melalui PIN, pola, atau kata sandi) - jika layar kunci tidak aman, konten lengkap pemberitahuan tersedia di layar kunci.

Pengaturan kategori

Dimulai dengan Android 5.0, kategori yang telah ditentukan tersedia untuk pemberitahuan peringkat dan pemfilteran. Xamarin.Android menyediakan enumerasi berikut untuk kategori berikut:

  • Notification.CategoryCall – Panggilan telepon masuk.

  • Notification.CategoryMessage – Pesan teks masuk.

  • Notification.CategoryAlarm – Kondisi alarm atau kedaluwarsa timer.

  • Notification.CategoryEmail – Pesan email masuk.

  • Notification.CategoryEvent – Acara kalender.

  • Notification.CategoryPromo – Pesan promosi atau iklan.

  • Notification.CategoryProgress – Kemajuan operasi latar belakang.

  • Notification.CategorySocial – Pembaruan jejaring sosial.

  • Notification.CategoryError – Kegagalan operasi latar belakang atau proses autentikasi.

  • Notification.CategoryTransport – Pembaruan pemutaran media.

  • Notification.CategorySystem – Dicadangkan untuk penggunaan sistem (status sistem atau perangkat).

  • Notification.CategoryService – Menunjukkan bahwa layanan latar belakang sedang berjalan.

  • Notification.CategoryRecommendation – Pesan rekomendasi yang terkait dengan aplikasi yang sedang berjalan.

  • Notification.CategoryStatus – Informasi tentang perangkat.

Saat pemberitahuan diurutkan, prioritas pemberitahuan lebih diutamakan daripada pengaturan kategorinya. Misalnya, pemberitahuan berprioritas tinggi akan ditampilkan sebagai Heads-up meskipun termasuk Promo dalam kategori. Untuk mengatur kategori pemberitahuan, Anda memanggil SetCategory metode NotificationCompat.Builder objek, melewati pengaturan kategori. Contohnya:

builder.SetCategory (Notification.CategoryCall);

Fitur Jangan ganggu (baru di Android 5.0) memfilter pemberitahuan berdasarkan kategori. Misalnya, layar Jangan ganggu di Pengaturan memungkinkan pengguna untuk mengecualikan pemberitahuan untuk panggilan telepon dan pesan:

Jangan ganggu sakelar layar

Ketika pengguna mengonfigurasi Jangan ganggu untuk memblokir semua gangguan kecuali untuk panggilan telepon (seperti yang diilustrasikan dalam cuplikan layar di atas), Android memungkinkan pemberitahuan dengan pengaturan Notification.CategoryCall kategori yang akan disajikan saat perangkat berada dalam mode Jangan diganggu . Perhatikan bahwa Notification.CategoryAlarm pemberitahuan tidak pernah diblokir dalam mode Jangan ganggu .

Gaya pemberitahuan

Untuk membuat pemberitahuan gaya Teks Besar, Gambar, atau Kotak Masuk dengan NotificationCompat.Builder, aplikasi Anda harus menggunakan versi kompatibilitas gaya ini. Misalnya, untuk menggunakan gaya Teks Besar, buat instans NotificationCompat.BigTextstyle:

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

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

Demikian pula, aplikasi Anda dapat menggunakan NotificationCompat.InboxStyle dan NotificationCompat.BigPictureStyle untuk gaya Kotak Masuk dan Gambar .

Prioritas dan kategori pemberitahuan

NotificationCompat.BuilderSetPriority mendukung metode (tersedia dimulai dengan Android 4.1). Namun, SetCategory metode ini tidak didukung oleh NotificationCompat.Builder karena kategori adalah bagian dari sistem metadata pemberitahuan baru yang diperkenalkan di Android 5.0.

Untuk mendukung versi Android yang lebih lama, jika SetCategory tidak tersedia, kode Anda dapat memeriksa tingkat API pada runtime untuk memanggil SetCategory secara kondisional saat tingkat API sama dengan atau lebih besar dari Android 5.0 (API level 21):

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

Dalam contoh ini, Target Framework aplikasi diatur ke Android 5.0 dan Versi Minimum Android diatur ke Android 4.1 (API Level 16). Karena SetCategory tersedia di API level 21 dan yang lebih baru, kode contoh ini hanya akan memanggil SetCategory ketika tersedia - kode tersebut tidak akan memanggil SetCategory ketika tingkat API kurang dari 21.

Mengunci visibilitas layar

Karena Android tidak mendukung pemberitahuan layar kunci sebelum Android 5.0 (API level 21), NotificationCompat.Builder tidak mendukung metode .SetVisibility Seperti yang dijelaskan di atas untuk SetCategory, kode Anda dapat memeriksa tingkat API pada runtime dan memanggil SetVisiblity hanya ketika tersedia:

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

Ringkasan

Artikel ini menjelaskan cara membuat pemberitahuan lokal di Android. Ini menjelaskan anatomi pemberitahuan, ini menjelaskan cara menggunakan NotificationCompat.Builder untuk membuat pemberitahuan, cara membuat pemberitahuan gaya dalam ikon besar, format Big Text, Gambar dan Kotak Masuk, cara mengatur pengaturan metadata pemberitahuan seperti prioritas, visibilitas, dan kategori, dan cara meluncurkan aktivitas dari pemberitahuan. Artikel ini juga menjelaskan cara kerja pengaturan pemberitahuan ini dengan fitur Heads-up, layar kunci, dan Jangan ganggu baru yang diperkenalkan di Android 5.0. Terakhir, Anda mempelajari cara menggunakan NotificationCompat.Builder untuk mempertahankan kompatibilitas pemberitahuan dengan versi Android sebelumnya.

Untuk panduan tentang mendesain pemberitahuan untuk Android, lihat Pemberitahuan.