Gaya notifikasi di Wear

Wear OS by Google mendukung gaya notifikasi untuk meningkatkan pengalaman pengguna pada jam tangan.

Gaya notifikasi yang paling umum adalah:

  • BIG_TEXT_STYLE
  • BIG_PICTURE_STYLE
  • INBOX_STYLE
  • MESSAGING_STYLE

Bagian di bawah ini membahas cara menambahkan MESSAGING_STYLE dan BIG_TEXT_STYLE ke notifikasi Anda. Untuk memasukkan gaya notifikasi lain, lihat contoh Notifikasi Wear.

Membuat notifikasi MessagingStyle

Jika Anda memiliki aplikasi pesan chat, notifikasi harus menggunakan NotificationCompat.MessagingStyle, yang ditambahkan di Android 7.0. Wear menggunakan pesan chat yang termasuk dalam notifikasi MessagingStyle (lihat addMessage()) untuk memberikan pengalaman mirip aplikasi chat kaya di notifikasi yang diperluas.

Catatan: notifikasi yang diperluas MessagingStyle mengharuskan Anda memiliki versi aplikasi pendamping Wear setidaknya 1.5.0.2861804 di ponsel Android Anda yang tersambung.

Smart Reply

Wear memperkenalkan Smart Reply untuk notifikasi MessagingStyle. Smart Reply menyediakan pengguna pilihan yang jelas dan relevan secara kontekstual di notifikasi yang diperluas dan di RemoteInput. Pilihan tersebut menambah daftar tetap pilihan yang disediakan developer di RemoteInput menggunakan metode setChoices().

Smart Reply memberi pengguna cara yang cepat (satu ketukan), senyap (tidak berbicara dengan suara keras), pribadi (pesan yang diterima pengguna tidak pernah meninggalkan jam tangan), dan andal (tidak perlu koneksi internet) untuk merespons pesan chat.

Respons Smart Reply dihasilkan oleh model machine learning yang sepenuhnya ada di jam tangan, menggunakan konteks yang tersedia dari notifikasi MessagingStyle. Tidak ada data notifikasi pengguna yang dikirimkan ke server Google untuk menghasilkan respons Smart Reply.

Guna mengaktifkan Smart Reply untuk tindakan notifikasi, Anda perlu melakukan langkah berikut:

  1. Gunakan NotificationCompat.MessagingStyle.
  2. Panggil metode setAllowGeneratedReplies(true) untuk tindakan notifikasi.
  3. Pastikan tindakan notifikasi memiliki RemoteInput yang ditentukan (lokasi respons akan berada).

Contoh berikut menunjukkan cara membuat notifikasi MessagingStyle dengan respons Smart Reply.

Kotlin

    // Create an intent for the reply action
    val replyPendingIntent = Intent(this, ReplyActivity::class.java).let { replyIntent ->
        PendingIntent.getActivity(this, 0, replyIntent, PendingIntent.FLAG_UPDATE_CURRENT)
    }

    // Create the reply action and add the remote input
    val action = NotificationCompat.Action.Builder(
            R.drawable.ic_reply_icon,
            getString(R.string.label),
            replyPendingIntent
    )
            .addRemoteInput(remoteInput)
            // 1) allow generated replies
            .setAllowGeneratedReplies(true)
            .build()

    val noti = NotificationCompat.Builder(context, channelId)
            .setContentTitle("${messages.size} new messages with $sender")
            .setContentText(subject)
            .setSmallIcon(R.drawable.new_message)
            .setLargeIcon(aBitmap)
            // 2) set the style to MessagingStyle
            .setStyle(
                    NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                            .addMessage(messages[0].text, messages[0].time, messages[0].sender)
                            .addMessage(messages[1].text, messages[1].time, messages[1].sender)
            )
            // 3) add an action with RemoteInput
            .extend(NotificationCompat.WearableExtender().addAction(action)).build()
    

Java

    // Create an intent for the reply action
    Intent replyIntent = new Intent(this, ReplyActivity.class);
    PendingIntent replyPendingIntent =
       PendingIntent.getActivity(this, 0, replyIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    // Create the reply action and add the remote input
    NotificationCompat.Action action =
       new NotificationCompat.Action.Builder(R.drawable.ic_reply_icon,
       getString(R.string.label), replyPendingIntent)
      .addRemoteInput(remoteInput)
       // 1) allow generated replies
      .setAllowGeneratedReplies(true)
      .build();

    Notification noti = new NotificationCompat.Builder()
        .setContentTitle(messages.length + " new messages with " + sender.toString())
        .setContentText(subject)
        .setSmallIcon(R.drawable.new_message)
        .setLargeIcon(aBitmap)
        // 2) set the style to MessagingStyle
        .setStyle(new NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
        .addMessage(messages[0].getText(), messages[0].getTime(), messages[0].getSender())
        .addMessage(messages[1].getText(), messages[1].getTime(), messages[1].getSender()))
        // 3) add an action with RemoteInput
        .extend(new WearableExtender().addAction(action)).build();
    

Menambahkan gambar ke notifikasi MessagingStyle

Anda dapat menambahkan gambar ke pesan notifikasi dengan menyetel jenis MIME yang tepat dan meletakkan URI ke gambar dalam metode NotificationCompat.MessagingStyle.Message.setData().

Berikut adalah cuplikan kode untuk menyetel data gambar jenis dalam notifikasi:

Kotlin

    val message = NotificationCompat.MessagingStyle.Message("sticker", 1, "Jeff")
            .setData("image/png", stickerUri)

    val notification = NotificationCompat.Builder(context, channelId)
            .setStyle(
                    NotificationCompat.MessagingStyle("Me").addMessage(message)
            )
            .build()
    

Java

    NotificationCompat.MessagingStyle.Message message = new Message("sticker", 1, "Jeff")
       .setData("image/png", stickerUri);

    NotificationCompat notification = new NotificationCompat.Builder()
        .setStyle(new NotificationCompat.MessagingStyle("Me")
            .addMessage(message))
        .build();
    

Dalam cuplikan kode di atas, variabel stickerUri adalah URI yang menunjuk pada lokasi yang dapat diakses publik, seperti dijelaskan berikut ini.

Membuat Notifikasi BigTextStyle

Anda dapat menyisipkan konten teks yang diperluas ke notifikasi menggunakan BIG_TEXT_STYLE. Pada perangkat genggam, pengguna dapat melihat konten yang diperluas dengan memperluas notifikasi. Pada perangkat wearable, konten yang diperluas terlihat secara default ketika Anda menggunakan BigTextStyle.

Untuk menambahkan konten yang diperluas ke notifikasi, panggil setStyle() di objek NotificationCompat.Builder, yang meneruskan instance baik BigTextStyle maupun InboxStyle.

Contohnya, kode berikut ini menambahkan instance NotificationCompat.BigTextStyle ke notifikasi peristiwa, untuk memasukkan deskripsi peristiwa lengkap (yang menyertakan lebih banyak teks daripada yang dapat masuk ke ruang yang disediakan untuk setContentText()).

Kotlin

    // Specify the 'big view' content to display the long
    // event description that may not fit the normal content text.
    val bigStyle = NotificationCompat.BigTextStyle().run {
        bigText(eventDescription)
    }

    val notificationBuilder = NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_event)
            .setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.notif_background))
            .setContentTitle(eventTitle)
            .setContentText(eventLocation)
            .setContentIntent(viewPendingIntent)
            .addAction(R.drawable.ic_map, getString(R.string.map), mapPendingIntent)
            .setStyle(bigStyle)
    

Java

    // Specify the 'big view' content to display the long
    // event description that may not fit the normal content text.
    BigTextStyle bigStyle = new NotificationCompat.BigTextStyle();
    bigStyle.bigText(eventDescription);

    NotificationCompat.Builder notificationBuilder =
        new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_event)
            .setLargeIcon(BitmapFactory.decodeResource(
                    getResources(), R.drawable.notif_background))
            .setContentTitle(eventTitle)
            .setContentText(eventLocation)
            .setContentIntent(viewPendingIntent)
            .addAction(R.drawable.ic_map,
                    getString(R.string.map), mapPendingIntent)
            .setStyle(bigStyle);
    

Ingat bahwa Anda dapat menambahkan gambar ikon besar ke notifikasi apa pun menggunakan metode setLargeIcon(). Namun, ikon ini muncul sebagai gambar latar besar di perangkat wearable dan tidak terlihat sebagus ketika diskalakan agar sesuai dengan layar perangkat wearable. Untuk menambahkan gambar latar khusus perangkat wearable ke notifikasi, lihat Menambahkan fitur spesifik perangkat wearable untuk notifikasi. Untuk informasi selengkapnya tentang mendesain notifikasi dengan gambar besar, lihat Prinsip desain Wear OS.

Membuat notifikasi MediaStyle

Anda dapat menggunakan class NotificationCompat.MediaStyle untuk menyertakan kontrol pemutaran di notifikasi. Agar UI Sistem dapat mengidentifikasi notifikasi yang merepresentasikan sesi media aktif, dan merespons dengan sesuai (misalnya, dengan menampilkan poster album di layar kunci), lampirkan MediaSession.Token menggunakan metode setMediaSession(MediaSession.Token).

Catatan: Jika Anda menggunakan NotificationCompat.MediaStyle pada notifikasi lokal tanpa sesi media terlampir, sistem akan menampilkan notifikasi sebagai notifikasi reguler dan mengabaikan detail gaya media.