Belajar Memakai Notification Di Android


Pada artikel Belajar Membuat Service Di Android, saya membuat sebuah service sederhana. Karena sebuah service selalu berjalan di balik layar dan bisa menghabiskan daya baterai, akan lebih baik bila saya menampilkan sebuah indikator bahwa servis sedang aktif. Hal ini dapat dilakukan dengan menggunakan notification. Android 5.0 (Lollipop) memiliki perubahan besar pada notification. Karena tidak memiliki perangkat yang menjalankan Android 5.0, saya akan menggunakan kode program notification untuk Android 4.4 (KitKat).

Sebagai latihan, saya menambahkan kode program seperti berikut ini pada class ServerService:

public class ServerService extends Service {

    ...

    private final int NOTIFICATION_ID = 1;

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (server == null) {
            ...
            Notification notification = new Notification.Builder(this)
                .setContentTitle("MyWebServer").setContentText("MyWebServer sedang aktif")
                .setOngoing(true).setSmallIcon(android.R.drawable.star_on)
                .build();
            ((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).notify(NOTIFICATION_ID, notification);

        }
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (server != null) {
            ...
            ((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(NOTIFICATION_ID);
        }
    }

    ...

}

Bila saya menjalankan service, saya akan melihat icon bintang di status bar seperti yang terlihat pada gambar berikut ini:

Tampilan icon di status bar

Tampilan icon di status bar

Bila saya membuka notification drawer, saya akan menemukan informasi seperti yang terlihat pada gambar berikut ini:

Tampilan notification

Tampilan notification

Untuk membuat notification, saya dapat menggunakan Notification.Builder.build() untuk menghasilkan sebuah Notification. Saya menggunakan setContentTitle() untuk mengisi tulisan pada baris pertama dan setContentText() untuk mengisi tulisan pada baris kedua. Saya juga menggunakan setOngoing(true) agar notifikasi ini tidak akan hilang (tidak bisa ditutup oleh pengguna). Pada setSmallIcon(), saya menggunakan icon bintang bawaan Android.

Untuk menampilkan Notification yang telah dibuat, saya perlu memanggil notify() milik NotificationManager. Saya juga menyertakan sebuah id yang bersifat unik untuk Notification tersebut. Tujuannya adalah agar saya dapat menutup notification tersebut bila tidak dibutuhkan lagi dengan menggunakan method NotificationManager.cancel().

Selain hanya menampilkan pesan, notification juga dapat mengerjakan sebuah aksi tertentu pada saat pengguna menyentuh notifikasi tersebut di notification drawer. Sebagai contoh, saya akan mengubah notification yang sebelumnya saya buat agar mengerjakan MainActivity bila ia disentuh oleh pengguna:

Intent mainActivityIntent = new Intent(this, MainActivity.class);
PendingIntent notifIntent = PendingIntent.getActivity(this, 0, mainActivityIntent, 0);
Notification notification = new Notification.Builder(this)
  .setContentTitle("MyWebServer").setContentText("MyWebServer sedang aktif")
  .setOngoing(true).setSmallIcon(android.R.drawable.star_on)
  .setContentIntent(notifIntent)
  .build();
((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).notify(NOTIFICATION_ID, notification);

Sekarang, bila notification ditekan oleh pengguna, MainActivity akan ditampilkan.

Sebagai latihan lebih lanjut, saya dapat memberikan action untuk mematikan web server pada notification sehingga pengguna tidak perlu membuka MainActivity untuk keperluan tersebut. Sebagai contoh, saya mengubah kode program yang membuat notification menjadi seperti berikut ini:

Intent stopServiceIntent = new Intent(this, ServerService.class);
stopServiceIntent.putExtra("stop", true);
PendingIntent pendingStopServiceIntent = PendingIntent.getService(this, 0, stopServiceIntent, PendingIntent.FLAG_ONE_SHOT);

Notification notification = new Notification.Builder(this)
  .setContentTitle("MyWebServer").setContentText("MyWebServer sedang aktif")
  .setOngoing(true).setSmallIcon(android.R.drawable.star_on)
  .setContentIntent(notifIntent)
  .addAction(android.R.drawable.ic_delete, "Stop", pendingStopServiceIntent)
  .build();

Pada contoh di atas, saya menggunakan addAction() untuk menambahkan action pada notification. Sekarang, bila notifikasi muncul di drawer, saya dapat menggesernya ke bawah untuk menemukan action seperti yang terlihat pada gambar berikut ini:

Tampilan action untuk notification

Tampilan action untuk notification

Akan tetapi tidak ada aksi yang terjadi pada saat saya menyentuh icon tersebut. Hal ini karena ServerService belum sadar bahwa ia dipanggil guna menghentikan service. Untuk itu, saya perlu menambahkan kode program berikut ini pada onStartCommand() di ServerService:

// Apakah ini adalah request untuk mematikan service?
if ((server != null) && intent.getBooleanExtra("stop", false)) {
   stopSelf();
}

Sekarang, bila saya menyentuh tombol di action, web server akan segera dimatikan.

Perihal Solid Snake
I'm nothing...

One Response to Belajar Memakai Notification Di Android

  1. Yatni Eka mengatakan:

    Maaf mau nanya, apakah bisa jika notifikasi di android akan muncul setelah saya menambah data di database server localhost ?
    Mohon informasinya. Terimakasih.

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: