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 một 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 tệp thông báo có thể mở rộng bằng cách áp dụng một trong số nhiều mẫu thông báo dưới dạng được 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 Tạo thông báo. Sau đó: cuộc gọi setStyle() có đối tượng kiểu và cung cấp thông tin tương ứng với mỗi mẫu, như như các ví dụ sau đây.

Thêm hình ảnh lớn

Để thêm hình ảnh vào thông báo, hãy chuyển một phiên bản của NotificationCompat.BigPictureStyle đến 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ỏ khi thông báo đã thu gọn, như được minh hoạ trong hình sau, hãy gọi setLargeIcon() rồi truyền hình ảnh. Sau đó, gọi BigPictureStyle.bigLargeIcon() và truyền hàm 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 hiển thị thông báo được thu gọn và thông báo mở rộng 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

Đăng ký 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 sử dụ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

Đăng ký NotificationCompat.InboxStyle vào 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ư từ email đến. Thao tác này cho phép bạn thêm nhiều đoạn nội dung được cắt bớt 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 chỉ hiển thị 6 dòng đầu tiên.

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 hiển thị thông báo kiểu hộp thư đến mở rộng
Hình 3. Kiểu hộp thư đến mở rộng .

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

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

Để thêm một tin nhắn mới, hãy gọi 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ể chuyển thông tin này dưới dạ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 cho thấy một thông báo theo kiểu nhắn tin
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 cấp cho setContentTitle()setContentText() sẽ 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 do người dùng tạo của nhóm hoặc, nếu không có tên cụ thể, danh sách những người tham gia cuộc trò chuyện. Không đặt tiêu đề cuộc trò chuyện cho trò chuyện trực tiếp, vì hệ thống 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 sử dụng thư viện về khả năng tương thích (NotificationCompat), như đã trình bày trước đó, thông báo có MessagingStyle sẽ giảm trở lại tự động sang 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 thông báo trực tiếp hành động trả lời.

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

Đăng ký MediaStyleNotificationHelper.MediaStyle để hiển thị bộ điều khiển chế độ phát nội dung nghe nhìn và theo dõi thông tin.

Chỉ định MediaSession trong hàm khởi tạo. Điều này cho phép Android hiển thị thông tin chính xác về nội dung đa phương tiện.

Gọi điện addAction() tối đa năm lần để hiển thị tối đa năm nút biểu tượng. Gọi setLargeIcon() tới thiết lập ả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 chế độ xem nội dung có kích thước thu gọn bằng cách chỉ định ba nút hành động cũng xuất hiện trong chế độ xem thu gọn. Để thực hiện việc này, hãy cung cấp chỉ mục nút hành động để setShowActionsInCompactView().

Ví dụ sau đây cho thấy cách tạo một 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à thông báo có thể mở rộng.