Mari kita lanjutkan pembahasan Membuat Notifikasi Kustom pada Android. Untuk menutup notifikasi, sebetulnya dapat Anda lakukan dengan mudah, yaitu dengan menggunakan flag yang tepat saat membangun notifikasi. Untuk lebih jelasnya, lihat kode sumber kelas CustomNotify, tuju baris ke 40 dan 41. Anda tinggal menghilangkan flag FLAG_ONGOING_EVENT saja untuk dapat menutup notifikasi. Kurang lebih akan menjadi seperti ini:

notification.flags |= Notification.FLAG_AUTO_CANCEL;
//Baris ke-41 dihapus
Silakan jalan kembali aplikasi, kemudian tampilkan notifikasi. Setelah tampil, Anda hanya tinggal mengusap notifikasi ke arah kanan, dan notifikasi akan terhapus/tertutup.

Namun jika Anda ingin notifikasi dapat dihapus saat tombol X diklik, maka mari kita pelajari caranya. Untuk menutup notifikasi secara sistemik, kenapa saya sebut sistemik? Karena saat kita ingin menutup notify dengan mengklik tombol X seperti skenario kali ini, sesungguhnya kita menyuruh sistem operasi Android untuk melakukannya. Artinya kita harus mengabarkan kepada sistem operasi agar melakukan perintah yang kita inginkan.

Untuk keperluan tersebut, kita membutuhkan sebuah obyek yang disebut BroadcastReceiver. Obyek ini akan menangkap perintah yang harus dijalankan oleh sistem kemudian memerintahkan obyek lainnya sesuai kebutuhan dan perintah yang kita kirimkan. Kita, harus menambahkan obyek ini ke dalam proyek.

Untuk menambahkan obyek BroadcastReceiver, Anda klik kanan cabang nama proyek pada Package Explorer, kemudian sorot menu New kemudian klik menu Other.... Maka akan ditampilkan dialog untuk menambahkan obyek baru. Perluas cabang Android kemudian klik cabang Android Object. Lanjutkan dengan mengklik tombol Next.

 Dialog New

Dialog New

Pada dialog berikutnya, klik Broadcast Receiver, lanjutkan dengan mengklik tombol Next.

 Memilih Jenis Obyek

Memilih Jenis Obyek

Namai obyek baru Anda, sebagai contoh saya memberinya nama: MyReceiver.

 Menamai Obyek

Menamai Obyek

Langsung kita akhiri saja dengan mengklik tombol Finish. Nah, akan bertambah kelas baru pada paket utama proyek kita.

 Obyek Baru pada Package Explorer

Obyek Baru pada Package Explorer

Silakan lihat-lihat kode sumber dari obyek/kelas baru tersebut.

 Kode Sumber Obyek

Kode Sumber Obyek

Sementara, kita abaikan dulu kelas tersebut. Sekarang kita lakukan perubahan pada kelas CustomNotify. Jika Anda sudah melakukan perubahan pada kelas CustomNotify seperti penjelasan paling awal dari tulisan ini, silakan kembalikan lebih dulu kode sumber dari CustomNotify menjadi seperti sedia kala.

Kita perlu menambahkan sebuah prosedur/metode untuk proses penutupan notify. Silakan tambahkan baris kode di bawah ini di dalam kalang deklarasi kelas CustomNotify.

//Prosedur untuk menutup notifikasi
private PendingIntent cancelNotif(Context context) {
    Intent cancelIntent = new Intent(context, MyReceiver.class);
    /* Mengirimkan ekstra (parameter) pada intent
     * Nilai parameter (1234) sesuaikan dengan ID 
     * saat pemanggilan notifikasi 
     * (lihat baris terakhir prosedur notify)
    */
    cancelIntent.putExtra("notifId", 1234);
    
    //Mengirimkan broadcast ke sistem operasi
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, cancelIntent, 0);
    return pendingIntent;
}
Selanjutnya kita harus mendaftarkan prosedur di atas pada saat pembangunan notify. Perhatikan baris kode ke 55 sampai 57.
//Memberikan kontrol event saat ikon (logo) diklik
views.setOnClickPendingIntent(R.id.btnLogoNotif, 
        showMainActivity(context));
Baris di atas merupakan cara mendaftarkan prosedur dengan nama showMainActivity pada view btnLogoNotif. Sekarang giliran kita mendaftarkan prosedur cancelNotif untuk view btnCloseNotif. Silakan sisipkan baris kode di bawah ini setelah baris kode di atas.
//Memberikan kontrol event saat ikon X diklik
views.setOnClickPendingIntent(R.id.btnCloseNotif, 
		cancelNotif(context));
Sekarang mari kita selesaikan pekerjaan pada kelas MyReceiver. Ubah kode sumbernya menjadi seperti di bawah ini.
package com.myapp.latihan18;

import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Build;

public class MyReceiver extends BroadcastReceiver { private static final String NOTIFICATION_TAG = "com.myapp.LATIHAN18"; public MyReceiver() { }

@Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. String notifKey = "notifId"; int notifId = 1234; int extraNotifId = intent.getIntExtra(notifKey, 0); //Terdapat perbedaan perlakuan pada versi Android if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD_MR1) { if (extraNotifId == notifId){ String ns = Context.NOTIFICATION_SERVICE; NotificationManager nm = (NotificationManager) context.getSystemService(ns); nm.cancel(notifId); nm.cancelAll(); } } else { if (extraNotifId == NOTIFICATION_TAG.hashCode()){ String ns = Context.NOTIFICATION_SERVICE; NotificationManager nm = (NotificationManager) context.getSystemService(ns); nm.cancel(NOTIFICATION_TAG.hashCode()); nm.cancelAll(); } } } }

Perhatikan metode onReceive, nilai untuk variabel notifKey dan notifId sesuaikan dengan nilai yang Anda gunakan pada kelas CustomNotify. Begitu juga dengan variabel konstanta NOTIFICATION_TAG.

Saya memberikan komentar pada baris kode di atas: Terdapat perbedaan perlakuan pada versi Android. Ya, karena memang seperti itu, untuk Android versi Gingerbread ke bawah (API 10 atau sebelumnya), identifikasi berdasarkan hasCode sementara versi Gingerbread ke atas (API 11 atau terbaru), kita bisa menentukan nilai identifikasi (pada contoh ini adalah 1234).

Silakan jalankan aplikasi! Klik tombol Tampilkan Notifikasi. Setelah notifikasi tampil, biarkan saja dulu. Tutup aplikasi dengan menekan tombol Back pada perangkat. Sekarang, pada notifikasi klik logo robot hijau. Apa yang terjadi? Ya, aplikasi Anda akan dijalankan kembali. Sekarang tinggal coba menghapus notifikasi dengan mengklik tombol X pada notifikasi.

Oya, Anda dapat menambahkan obyek Broadcast Receiver secara manual (dengan menambahkan sebuah berkas kelas pada paket), namun yang perlu Anda ingat, jika Anda menambahkan ini secara manual, periksa kembali berkas AndroidManifest.xml Anda, jangan lupa untuk mendaftarkan obyek tersebut di dalam kalang Application. Untuk mendaftarkannya gunakan skrip berikut ini:

<receiver
    android:name=".MyReceiver"
    android:enabled="true"
    android:exported="true" >
</receiver>
Mudah bukan?

 

Komentar Anda

Komentari