Membuat Notifikasi yang Dapat Diluaskan

Notifikasi dasar biasanya mencakup judul, satu baris teks, dan satu atau beberapa tindakan yang dapat dilakukan pengguna sebagai respons. Untuk memberikan informasi selengkapnya, Anda juga bisa membuat notifikasi yang besar dan dapat diperluas dengan menerapkan salah satu dari beberapa template notifikasi seperti yang dijelaskan pada halaman ini.

Untuk memulai, buat notifikasi dengan semua konten dasar seperti yang dijelaskan dalam Membuat Notifikasi. Kemudian, panggil setStyle() dengan objek gaya dan berikan informasi yang sesuai dengan setiap template, seperti yang ditunjukkan di bawah ini.

Menambahkan gambar berukuran besar

Untuk menambahkan gambar pada notifikasi Anda, teruskan instance NotificationCompat.BigPictureStyle ke setStyle().

Kotlin

    var notification = NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_post)
            .setContentTitle(imageTitle)
            .setContentText(imageDescription)
            .setStyle(NotificationCompat.BigPictureStyle()
                    .bigPicture(myBitmap))
            .build()
    

Java

    Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_post)
            .setContentTitle(imageTitle)
            .setContentText(imageDescription)
            .setStyle(new NotificationCompat.BigPictureStyle()
                   .bigPicture(myBitmap))
            .build();
    

Agar gambar hanya muncul sebagai thumbnail saat notifikasi diciutkan (seperti yang ditunjukkan pada gambar 1), panggil setLargeIcon() dan teruskan gambar tersebut, tetapi panggil juga BigPictureStyle.bigLargeIcon() dan meneruskannya null agar ikon besar hilang saat notifikasi diperluas:

Kotlin

    var notification = NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_post)
            .setContentTitle(imageTitle)
            .setContentText(imageDescription)
            .setLargeIcon(myBitmap)
            .setStyle(NotificationCompat.BigPictureStyle()
                    .bigPicture(myBitmap)
                    .bigLargeIcon(null))
            .build()
    

Java

    Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_post)
            .setContentTitle(imageTitle)
            .setContentText(imageDescription)
            .setLargeIcon(myBitmap)
            .setStyle(new NotificationCompat.BigPictureStyle()
                    .bigPicture(myBitmap)
                    .bigLargeIcon(null))
            .build();
    

Gambar 1. Notifikasi menggunakan NotificationCompat.BigPictureStyle

Menambahkan blok teks besar

Terapkan NotificationCompat.BigTextStyle untuk menampilkan teks di area konten yang diperluas pada notifikasi:

Kotlin

    var notification = NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_mail)
            .setContentTitle(emailObject.getSenderName())
            .setContentText(emailObject.getSubject())
            .setLargeIcon(emailObject.getSenderAvatar())
            .setStyle(NotificationCompat.BigTextStyle()
                    .bigText(emailObject.getSubjectAndSnippet()))
            .build()
    

Java

    Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_mail)
            .setContentTitle(emailObject.getSenderName())
            .setContentText(emailObject.getSubject())
            .setLargeIcon(emailObject.getSenderAvatar())
            .setStyle(new NotificationCompat.BigTextStyle()
                    .bigText(emailObject.getSubjectAndSnippet()))
            .build();
    

Gambar 2. Notifikasi menggunakan NotificationCompat.BigTextStyle

Tips: Untuk menambahkan pemformatan dalam teks Anda (tebal, miring, jeda baris, dan sebagainya), Anda dapat menambahkan gaya dengan markup HTML.

Membuat notifikasi gaya kotak masuk

Terapkan NotificationCompat.InboxStyle ke notifikasi jika ingin menambahkan beberapa baris ringkasan pendek, seperti cuplikan dari email yang masuk. Hal ini memungkinkan Anda untuk menambahkan beberapa bagian teks konten yang masing-masing terpotong ke satu baris, bukan satu baris teks berkelanjutan yang disediakan oleh NotificationCompat.BigTextStyle.

Untuk menambahkan baris baru, panggil addLine() maksimal 6 kali. Jika Anda menambahkan lebih dari 6 baris, hanya 6 baris pertama yang akan terlihat.

Kotlin

    var notification = NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_mail)
            .setContentTitle("5 New mails from " + sender.toString())
            .setContentText(subject)
            .setLargeIcon(aBitmap)
            .setStyle(NotificationCompat.InboxStyle()
                    .addLine(messageSnippet1)
                    .addLine(messageSnippet2))
            .build()
    

Java

    Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_mail)
            .setContentTitle("5 New mails from " + sender.toString())
            .setContentText(subject)
            .setLargeIcon(aBitmap)
            .setStyle(new NotificationCompat.InboxStyle()
                    .addLine(messageSnippet1)
                    .addLine(messageSnippet2))
            .build();
    

Tips: Anda bisa membedakan subjek pesan dan pesan di setiap baris dengan menambahkan gaya dengan markup HTML (seperti membuat tebal subjek).

Menampilkan percakapan dalam notifikasi

Terapkan NotificationCompat.MessagingStyle untuk menampilkan pesan berurutan di antara sejumlah orang. Hal ini sangat ideal untuk aplikasi pesan karena menyediakan tata letak yang konsisten untuk setiap pesan dengan menangani nama pengirim dan teks pesan secara terpisah, dan setiap pesan dapat terdiri dari beberapa baris.

Untuk menambahkan pesan baru, panggil addMessage(), yang meneruskan teks pesan, waktu penerimaan, dan nama pengirim. Anda juga bisa meneruskan informasi ini sebagai objek NotificationCompat.MessagingStyle.Message.

Kotlin

    var message1 = NotificationCompat.MessagingStyle.Message(messages[0].getText(),
            messages[0].getTime(),
            messages[0].getSender())
    var message2 = NotificationCompat.MessagingStyle.Message(messages[1].getText(),
            messages[1].getTime(),
            messages[1].getSender())
    var notification = NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_message)
            .setStyle(NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                    .addMessage(message1)
                    .addMessage(message2))
            .build()
    

Java

    NotificationCompat.MessagingStyle.Message message1 =
            new NotificationCompat.MessagingStyle.Message(messages[0].getText(),
                                                          messages[0].getTime(),
                                                          messages[0].getSender());
    NotificationCompat.MessagingStyle.Message message2 =
            new NotificationCompat.MessagingStyle.Message(messages[1].getText(),
                                                          messages[1].getTime(),
                                                          messages[1].getSender());

    Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_message)
            .setStyle(new NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                    .addMessage(message1)
                    .addMessage(message2))
            .build();
    

Gambar 3. Notifikasi menggunakan NotificationCompat.MessagingStyle

Jika ingin, Anda bisa memanggil setConversationTitle() untuk menambahkan judul yang muncul di atas percakapan. Hal ini dapat berupa nama grup yang dibuat pengguna atau daftar peserta dalam percakapan jika tidak memiliki nama tertentu. Jangan menetapkan judul percakapan untuk obrolan satu lawan satu, karena sistem akan menggunakan kolom ini sebagai petunjuk bahwa percakapan tersebut adalah grup.

Gaya ini hanya berlaku pada perangkat yang menjalankan Android 7.0 (API level 24) dan versi lebih tinggi. Saat menggunakan library kompatibilitas (NotificationCompat) seperti yang ditunjukkan di atas, notifikasi dengan MessagingStyle akan melakukan fallback secara otomatis ke gaya notifikasi diperluas yang didukung.

Saat membuat notifikasi seperti ini untuk percakapan obrolan, Anda juga harus menambahkan tindakan balasan langsung.

Membuat notifikasi dengan kontrol media

Terapkan NotificationCompat.MediaStyle untuk menampilkan kontrol pemutaran media dan melacak informasi.

Panggil addAction() hingga maksimum lima kali untuk menampilkan hingga lima tombol ikon terpisah. Lalu panggil setLargeIcon() untuk menyetel poster album.

Berbeda dengan gaya notifikasi lainnya, MediaStyle juga memungkinkan Anda memodifikasi tampilan konten dengan penyusutan ukuran, dengan menentukan tiga tombol tindakan yang juga akan muncul dalam tampilan ciut. Untuk melakukannya, berikan indeks tombol tindakan ke setShowActionsInCompactView().

Jika notifikasi tersebut mewakili sesi media aktif, lampirkan juga MediaSession.Token ke notifikasi menggunakan setMediaSession(). Android kemudian akan mengidentifikasinya sebagai notifikasi yang mewakili sesi media aktif dan merespons berdasarkan hal tersebut (misalnya dengan menunjukkan poster album di layar kunci).

Kotlin

    import android.support.v4.app.NotificationCompat
    import android.support.v4.media.app.NotificationCompat as MediaNotificationCompat

    var notification = NotificationCompat.Builder(context, CHANNEL_ID)
            // Show controls on lock screen even when user hides sensitive content.
            .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
            .setSmallIcon(R.drawable.ic_stat_player)
            // Add media control buttons that invoke intents in your media service
            .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
            .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent) // #1
            .addAction(R.drawable.ic_next, "Next", nextPendingIntent) // #2
            // Apply the media style template
            .setStyle(MediaNotificationCompat.MediaStyle()
                    .setShowActionsInCompactView(1 /* #1: pause button \*/)
                    .setMediaSession(mediaSession.getSessionToken()))
            .setContentTitle("Wonderful music")
            .setContentText("My Awesome Band")
            .setLargeIcon(albumArtBitmap)
            .build()
    

Java

    Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
            // Show controls on lock screen even when user hides sensitive content.
            .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
            .setSmallIcon(R.drawable.ic_stat_player)
            // Add media control buttons that invoke intents in your media service
            .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
            .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent)  // #1
            .addAction(R.drawable.ic_next, "Next", nextPendingIntent)     // #2
            // Apply the media style template
            .setStyle(new android.support.v4.media.app.Notification.MediaStyle()
                    .setShowActionsInCompactView(1 /* #1: pause button */)
                    .setMediaSession(mediaSession.getSessionToken()))
            .setContentTitle("Wonderful music")
            .setContentText("My Awesome Band")
            .setLargeIcon(albumArtBitmap)
            .build();
    

Gambar 4. Notifikasi menggunakan NotificationCompat.MediaStyle

Untuk informasi selengkapnya, baca juga Menggunakan notifikasi MediaStyle dengan layanan latar depan. Untuk kode contoh yang menggunakan notifikasi, lihat Contoh Notifikasi Android.