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

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

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

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

หากต้องการเพิ่มรูปภาพในการแจ้งเตือน ให้ส่งอินสแตนซ์ของ NotificationCompat.BigPictureStyle ไปยัง setStyle()

var notification =
    NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(com.example.compose.snippets.R.drawable.ic_logo)
        .setContentTitle("Title")
        .setContentText("Content text")
        .setStyle(
            NotificationCompat.BigPictureStyle()
                .bigPicture(bitmapImage)
        )
        .build()

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

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setContentTitle("Title")
    .setContentText("Content text")
    .setLargeIcon(Icon.createWithResource(context, R.drawable.dog))
    .setStyle(
        NotificationCompat.BigPictureStyle()
            .bigPicture(bitmapImage)
            .bigLargeIcon(null as Bitmap?)
    )
    .build()

การแจ้งเตือนที่ยุบอยู่และการแจ้งเตือนที่ขยายอยู่ซึ่งมีรูปภาพสีน้ำเงิน
รูปที่ 1 การแจ้งเตือนโดยใช้ NotificationCompat.BigPictureStyle

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

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

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setContentTitle("Sender name")
    .setContentText("Email subject")
    .setLargeIcon(Icon.createWithResource(context, R.drawable.dog))
    .setStyle(
        NotificationCompat.BigTextStyle()
            .bigText(someVeryLongMessage)
    )
    .build()

การแจ้งเตือนที่ยุบอยู่และการแจ้งเตือนที่ขยายอยู่โดยใช้ BigTextStyle
รูปที่ 2 การแจ้งเตือนโดยใช้ NotificationCompat.BigTextStyle

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

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

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

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

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

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

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

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

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

val message1 = NotificationCompat.MessagingStyle.Message(
    messages[0].text,
    messages[0].time,
    messages[0].sender
)
val message2 = NotificationCompat.MessagingStyle.Message(
    messages[1].text,
    messages[1].time,
    messages[1].sender
)
notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.MessagingStyle(Person.Builder().setName("Me").build())
            .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()

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

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    // Show controls on lock screen even when user hides sensitive content.
    .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
    .setSmallIcon(com.example.compose.snippets.R.drawable.play)
    // Add media control buttons that invoke intents in your media service
    .addAction(R.drawable.previous, "Previous", null /* Add valid intent */) // #0
    .addAction(R.drawable.pause, "Pause", null /* Add valid intent */) // #1
    .addAction(R.drawable.next, "Next", null /* Add valid intent */) // #2
    // Apply the media style template.
    .setStyle(MediaStyleNotificationHelper.MediaStyle(mediaSession)
        .setShowActionsInCompactView(1 /* #1: pause button */))
    .setContentTitle("Wonderful music")
    .setContentText("My Awesome Band")
    .setLargeIcon(bitmapImage)
    .build()

การแจ้งเตือนที่มีสไตล์สื่อ
รูปที่ 5 การแจ้งเตือนโดยใช้ MediaStyleNotificationHelper.MediaStyle

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

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