สร้างการแจ้งเตือนที่ขยายได้

การแจ้งเตือนขั้นพื้นฐานมักจะประกอบด้วยชื่อ บรรทัดข้อความ และการดำเนินการ ที่ผู้ใช้สามารถดำเนินการตอบสนอง หากต้องการข้อมูลเพิ่มเติม คุณสามารถสร้าง การแจ้งเตือนที่ขยายได้ โดยใช้หนึ่งในเทมเพลตการแจ้งเตือนหลายๆ แบบเป็น ตามที่อธิบายไว้ในเอกสารนี้

หากต้องการเริ่มต้น ให้สร้างการแจ้งเตือนที่มีเนื้อหาพื้นฐานทั้งหมดดังที่อธิบายไว้ใน สร้างการแจ้งเตือน จากนั้นให้ทำดังนี้ โทร setStyle() ด้วยออบเจ็กต์รูปแบบและให้ข้อมูลที่เกี่ยวข้องกับแต่ละเทมเพลต ที่แสดงในตัวอย่างต่อไปนี้

เพิ่มรูปภาพขนาดใหญ่

หากต้องการเพิ่มรูปภาพในการแจ้งเตือน ให้ส่งผ่านอินสแตนซ์ NotificationCompat.BigPictureStyle ไปยัง 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();

เพื่อให้รูปภาพปรากฏเป็นภาพขนาดย่อเฉพาะในขณะที่มีการแจ้งเตือน ยุบลงดังที่ปรากฏในรูปต่อไปนี้ เรียก setLargeIcon() แล้วส่งรูปภาพนั้น จากนั้นโทร BigPictureStyle.bigLargeIcon() แล้วส่ง null เพื่อให้ไอคอนขนาดใหญ่หายไปเมื่อมีการแจ้งเตือน ขยายแล้ว:

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();
วันที่ รูปภาพที่แสดงการแจ้งเตือนแบบยุบและการแจ้งเตือนแบบขยายที่มีรูปภาพสีน้ำเงิน
รูปที่ 1 การแจ้งเตือนที่ใช้ NotificationCompat.BigPictureStyle

เพิ่มข้อความบล็อกขนาดใหญ่

นำไปใช้ NotificationCompat.BigTextStyle เพื่อแสดงข้อความในพื้นที่เนื้อหาแบบขยายของการแจ้งเตือน

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();
วันที่ รูปภาพแสดงการแจ้งเตือนแบบยุบและการแจ้งเตือนแบบขยายโดยใช้ BigTextStyle
รูปที่ 2 การแจ้งเตือนที่ใช้ NotificationCompat.BigTextStyle

สร้างการแจ้งเตือนรูปแบบกล่องจดหมาย

นำไปใช้ NotificationCompat.InboxStyle ลงในการแจ้งเตือน หากต้องการเพิ่มบรรทัดสรุปสั้นๆ หลายบรรทัด เช่น ตัวอย่างจากอีเมลขาเข้า ช่วยให้คุณเพิ่มข้อความเนื้อหาหลายส่วนได้ ที่แต่ละเส้นจะถูกตัดเหลือ 1 บรรทัด แทนที่จะเป็นบรรทัดเดียวที่ต่อเนื่องกันของข้อความ โดย NotificationCompat.BigTextStyle

หากต้องการเพิ่มสายใหม่ โปรดโทร addLine() ได้สูงสุด 6 ครั้ง ดังที่แสดงในตัวอย่างต่อไปนี้ ถ้าคุณเพิ่มมากกว่าหกช่อง ระบบจะแสดงเฉพาะ 6 บรรทัดแรกเท่านั้น

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

ผลลัพธ์จะมีลักษณะเป็นรูปต่อไปนี้

วันที่ รูปภาพแสดงการแจ้งเตือนรูปแบบกล่องจดหมายแบบขยาย
รูปที่ 3 รูปแบบกล่องจดหมายแบบขยาย การแจ้งเตือน

แสดงการสนทนาในการแจ้งเตือน

นำไปใช้ NotificationCompat.MessagingStyle เพื่อแสดงข้อความตามลำดับระหว่างผู้ใช้กี่รายก็ได้ เหมาะสำหรับ แอปรับส่งข้อความ เนื่องจากแอปนี้มีรูปแบบที่สอดคล้องกัน สำหรับข้อความแต่ละรายการโดย การจัดการชื่อผู้ส่งและข้อความแยกต่างหาก และสามารถ ยาวหลายบรรทัด

หากต้องการเพิ่มข้อความใหม่ ให้โทร addMessage() การส่ง SMS, เวลาที่ได้รับ และชื่อผู้ส่ง นอกจากนี้คุณยัง ส่งต่อข้อมูลนี้ในรูปแบบ NotificationCompat.MessagingStyle.Message ตามที่แสดงในตัวอย่างต่อไปนี้

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();
วันที่ รูปภาพแสดงการแจ้งเตือนในรูปแบบการรับส่งข้อความ
รูปที่ 4 การแจ้งเตือนที่ใช้ NotificationCompat.MessagingStyle

เมื่อใช้ NotificationCompat.MessagingStyle ค่าใดๆ ที่กำหนดไปยัง setContentTitle() และ setContentText() จะถูกละเว้น

คุณสามารถโทรหา setConversationTitle() เพื่อเพิ่มชื่อที่ปรากฏเหนือการสนทนา นี่อาจเป็น ชื่อกลุ่มที่สร้างโดยผู้ใช้ หรือหากกลุ่มนั้นไม่มีชื่อใดโดยเฉพาะ รายการ ผู้เข้าร่วมในการสนทนา ไม่ตั้งชื่อการสนทนาสำหรับ การแชทแบบหนึ่งต่อหนึ่ง เนื่องจากระบบจะใช้การมีอยู่ของฟิลด์นี้เป็นคำแนะนำ การสนทนาเป็นกลุ่ม

รูปแบบนี้ใช้กับอุปกรณ์ที่ใช้ Android 7.0 (API ระดับ 24) ขึ้นไปเท่านั้น เมื่อใช้ไลบรารีความเข้ากันได้ (NotificationCompat), ตามที่แสดงให้เห็นก่อนหน้า การแจ้งเตือนที่มี MessagingStyle จะเปลี่ยนกลับ เป็นรูปแบบการแจ้งเตือนแบบขยายที่รองรับโดยอัตโนมัติ

เมื่อสร้างการแจ้งเตือนลักษณะนี้สำหรับการสนทนาผ่านแชท ให้เพิ่มข้อความส่วนตัว การตอบกลับ

สร้างการแจ้งเตือนด้วยตัวควบคุมสื่อ

นำไปใช้ MediaStyleNotificationHelper.MediaStyle เพื่อแสดงตัวควบคุมการเล่นสื่อและข้อมูลแทร็ก

ระบุ MediaSession ในช่วง เครื่องมือสร้างขึ้นมา วิธีนี้จะช่วยให้ Android แสดงข้อมูลที่ถูกต้องเกี่ยวกับ สื่อ

โทร addAction() ได้สูงสุด 5 ครั้งเพื่อแสดงปุ่มไอคอนสูงสุด 5 ปุ่ม โทรหา setLargeIcon() ถึง กำหนดปกอัลบั้ม

MediaStyle ยังให้คุณแก้ไข ดูเนื้อหาขนาดยุบได้โดยระบุปุ่มดำเนินการ 3 ปุ่มที่ปรากฏ ในมุมมองแบบยุบ ในการดำเนินการดังกล่าว ให้ระบุดัชนีปุ่มการทำงานไปยัง setShowActionsInCompactView()

ตัวอย่างต่อไปนี้แสดงวิธีการสร้างการแจ้งเตือนด้วยตัวควบคุมสื่อ

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();
วันที่ รูปภาพแสดงการแจ้งเตือนพร้อมรูปแบบสื่อ
รูปที่ 5 การแจ้งเตือนที่ใช้ MediaStyleNotificationHelper.MediaStyle

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลอ้างอิงต่อไปนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ MediaStyle และ การแจ้งเตือนที่ขยายได้