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

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

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

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

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

  val notification = NotificationCompat.Builder(context, CHANNEL_ID)
          .setSmallIcon(R.drawable.new_post)
          .setContentTitle(imageTitle)
          .setContentText(imageDescription)
          .setStyle(NotificationCompat.BigPictureStyle()
                  .bigPicture(myBitmap))
          .build()

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

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

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

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

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

สร้างการแจ้งเตือนสไตล์กล่องจดหมาย

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

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

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

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

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

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

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

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

  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()
การแจ้งเตือนในรูปแบบการรับส่งข้อความ
รูปที่ 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()

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

  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()
การแจ้งเตือนที่มีสไตล์สื่อ
รูปที่ 5 การแจ้งเตือนที่ใช้ MediaStyleNotificationHelper.MediaStyle

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

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