Tạo một thông báo có thể mở rộng

Một thông báo cơ bản thường bao gồm tiêu đề, một dòng văn bản và các thao tác mà người dùng có thể thực hiện để phản hồi. Để cung cấp thêm thông tin, bạn có thể tạo các thông báo lớn và có thể mở rộng bằng cách áp dụng một trong số các mẫu thông báo như mô tả trong tài liệu này.

Để bắt đầu, hãy tạo một thông báo có tất cả nội dung cơ bản như mô tả trong phần Tạo thông báo. Sau đó, hãy gọi setStyle() với một đối tượng kiểu và cung cấp thông tin tương ứng với từng mẫu, như minh hoạ trong các ví dụ sau.

Thêm hình ảnh lớn

Để thêm hình ảnh vào thông báo, hãy truyền một thực thể của NotificationCompat.BigPictureStyle vào setStyle().

Kotlin

val 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();

Để hình ảnh chỉ xuất hiện dưới dạng hình thu nhỏ trong khi thông báo được thu gọn, như minh hoạ trong hình sau, hãy gọi setLargeIcon() và truyền vào đó hình ảnh đó. Sau đó, hãy gọi BigPictureStyle.bigLargeIcon() và truyền tham số đó null để biểu tượng lớn biến mất khi thông báo được mở rộng:

Kotlin

val 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();
Hình ảnh cho thấy một thông báo được thu gọn và một thông báo mở rộng có chứa hình ảnh màu xanh dương
Hình 1. Một thông báo sử dụng NotificationCompat.BigPictureStyle.

Thêm một khối văn bản lớn

Áp dụng NotificationCompat.BigTextStyle để hiển thị văn bản trong vùng nội dung mở rộng của thông báo:

Kotlin

val 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();
Hình ảnh hiển thị một thông báo được thu gọn và một thông báo mở rộng bằng BigTextStyle
Hình 2. Một thông báo sử dụng NotificationCompat.BigTextStyle.

Tạo thông báo kiểu hộp thư đến

Áp dụng NotificationCompat.InboxStyle cho một thông báo nếu bạn muốn thêm nhiều dòng tóm tắt ngắn, chẳng hạn như đoạn trích của email đến. Cách này cho phép bạn thêm nhiều đoạn văn bản nội dung mà mỗi đoạn được cắt ngắn thành một dòng, thay vì một dòng văn bản liên tục do NotificationCompat.BigTextStyle cung cấp.

Để thêm một dòng mới, hãy gọi addLine() tối đa 6 lần, như trong ví dụ sau. Nếu bạn thêm nhiều hơn 6 dòng, thì chỉ có 6 dòng đầu tiên hiển thị.

Kotlin

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.baseline_email_24)
        .setContentTitle("5 New mails from Frank")
        .setContentText("Check them out")
        .setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.logo))
        .setStyle(
                NotificationCompat.InboxStyle()
                .addLine("Re: Planning")
                .addLine("Delivery on its way")
                .addLine("Follow-up")
        )
        .build()

Java

Notification notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.baseline_email_24)
        .setContentTitle("5 New mails from Frank")
        .setContentText("Check them out")
        .setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.logo))
        .setStyle(
                NotificationCompat.InboxStyle()
                .addLine("Re: Planning")
                .addLine("Delivery on its way")
                .addLine("Follow-up")
        )
        .build();

Kết quả sẽ có dạng như hình sau:

Hình ảnh cho thấy một thông báo kiểu hộp thư đến mở rộng
Hình 3. Thông báo kiểu hộp thư đến mở rộng.

Hiện cuộc trò chuyện trong thông báo

Áp dụng NotificationCompat.MessagingStyle để hiển thị các thông điệp tuần tự giữa số lượng người dùng bất kỳ. API này lý tưởng cho các ứng dụng nhắn tin vì tính năng này cung cấp bố cục nhất quán cho từng tin nhắn bằng cách xử lý riêng tên người gửi và văn bản tin nhắn, đồng thời mỗi tin nhắn có thể dài nhiều dòng.

Để thêm tin nhắn mới, hãy gọi hàm addMessage(), chuyển nội dung tin nhắn, thời gian nhận được và tên người gửi. Bạn cũng có thể truyền thông tin này dưới dạng đối tượng NotificationCompat.MessagingStyle.Message, như trong ví dụ sau:

Kotlin

val message1 = NotificationCompat.MessagingStyle.Message(
        messages[0].getText(),
        messages[0].getTime(),
        messages[0].getSender())
val message2 = NotificationCompat.MessagingStyle.Message(
        messages[1].getText(),
        messages[1].getTime(),
        messages[1].getSender())
val 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();
Hình ảnh một thông báo theo kiểu thông báo
Hình 4. Một thông báo sử dụng NotificationCompat.MessagingStyle.

Khi sử dụng NotificationCompat.MessagingStyle, mọi giá trị được cung cấp cho setContentTitle()setContentText() đều bị bỏ qua.

Bạn có thể gọi setConversationTitle() để thêm tiêu đề xuất hiện phía trên cuộc trò chuyện. Đây có thể là tên nhóm do người dùng tạo hoặc danh sách những người tham gia cuộc trò chuyện nếu nhóm không có tên cụ thể. Đừng đặt tiêu đề cuộc trò chuyện cho cuộc trò chuyện trực tiếp vì hệ thống sẽ sử dụng sự tồn tại của trường này làm gợi ý rằng cuộc trò chuyện là một nhóm.

Kiểu này chỉ áp dụng trên các thiết bị chạy Android 7.0 (API cấp 24) trở lên. Khi bạn sử dụng thư viện tương thích (NotificationCompat), như đã minh hoạ trước đó, các thông báo có MessagingStyle sẽ tự động quay lại về kiểu thông báo mở rộng được hỗ trợ.

Khi tạo một thông báo như thế này cho một cuộc trò chuyện, hãy thêm thao tác trả lời trực tiếp.

Tạo thông báo bằng các chế độ điều khiển nội dung nghe nhìn

Áp dụng MediaStyleNotificationHelper.MediaStyle để hiển thị bộ điều khiển chế độ phát nội dung đa phương tiện và thông tin theo dõi.

Chỉ định MediaSession được liên kết trong hàm khởi tạo. Điều này cho phép Android hiển thị thông tin phù hợp về nội dung nghe nhìn của bạn.

Gọi addAction() tối đa 5 lần để hiển thị tối đa 5 nút biểu tượng. Gọi setLargeIcon() để đặt ảnh bìa đĩa nhạc.

Không giống như các kiểu thông báo khác, MediaStyle cũng cho phép bạn sửa đổi khung hiển thị nội dung có kích thước thu gọn bằng cách chỉ định 3 nút hành động cũng xuất hiện trong khung hiển thị thu gọn. Để thực hiện việc này, hãy cung cấp các chỉ mục nút hành động cho setShowActionsInCompactView().

Ví dụ sau đây trình bày cách tạo thông báo bằng các chế độ điều khiển nội dung nghe nhìn:

Kotlin

val 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(MediaStyleNotificationHelper.MediaStyle(mediaSession)
                .setShowActionsInCompactView(1 /* #1: pause button \*/))
        .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 MediaStyleNotificationHelper.MediaStyle(mediaSession)
                .setShowActionsInCompactView(1 /* #1: pause button */))
        .setContentTitle("Wonderful music")
        .setContentText("My Awesome Band")
        .setLargeIcon(albumArtBitmap)
        .build();
Hình ảnh hiển thị một thông báo có kiểu nội dung đa phương tiện
Hình 5. Một thông báo sử dụng MediaStyleNotificationHelper.MediaStyle.

Tài nguyên khác

Hãy xem các tài liệu tham khảo sau để biết thêm thông tin về MediaStyle và các thông báo có thể mở rộng.