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

การแจ้งเตือนพื้นฐานมักประกอบด้วยชื่อ ข้อความ 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 บรรทัดได้ แทนที่จะเป็นข้อความบรรทัดเดียวต่อเนื่องกันที่ได้จาก 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 และการแจ้งเตือนแบบขยายได้จากข้อมูลอ้างอิงต่อไปนี้