สร้างการแจ้งเตือนรูปแบบการโทรสำหรับแอปการโทร

ใน Android 12.0 (API ระดับ 31) ขึ้นไป ระบบจะให้ เทมเพลตการแจ้งเตือน CallStyle เพื่อแยกการแจ้งเตือนสายเรียกเข้าออกจาก การแจ้งเตือนประเภทอื่นๆ ใช้เทมเพลตนี้เพื่อสร้างคอนเทนต์ขาเข้าหรือ การแจ้งเตือนสายที่สนทนาอยู่ เทมเพลตรองรับการแจ้งเตือนรูปแบบขนาดใหญ่ ที่มีข้อมูลผู้โทรและการดำเนินการที่จำเป็น เช่น การรับสาย หรือ สายที่ปฏิเสธ

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

เทมเพลตการแจ้งเตือน CallStyle มีการดำเนินการที่จำเป็นต่อไปนี้

  • รับสายหรือปฏิเสธสายเรียกเข้า
  • วางสายสำหรับสายที่สนทนาอยู่
  • รับสายหรือวางสายเพื่อสกรีนสายเรียกเข้า

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

วันที่ การแจ้งเตือนรูปแบบการโทรพร้อมปุ่มที่มีป้ายกำกับ
รูปที่ 1 เทมเพลต CallStyle สำหรับสายเรียกเข้าและสายที่สนทนาอยู่

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

ตั้งแต่ Android 14 (API ระดับ 34) เป็นต้นไป คุณจะกำหนดค่าการแจ้งเตือนสายเรียกเข้าได้ ปิดไม่ได้ โดยใช้การแจ้งเตือนของ CallStyle กับ Notification.FLAG_ONGOING_EVENT จนถึง Notification.Builder#setOngoing(true)

ต่อไปนี้เป็นตัวอย่างการใช้วิธีการต่างๆ ด้วย CallStyle การแจ้งเตือน

Kotlin

// Create a new call, setting the user as the caller.
val incomingCaller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Java

// Create a new call with the user as the caller.
Person incomingCaller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

สายเรียกเข้า

ใช้เมธอด forIncomingCall() เพื่อสร้างการแจ้งเตือนรูปแบบการโทรสำหรับ สายเรียกเข้า

Kotlin

// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incomingCaller)

Java

// Create a call style notification for an incoming call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incomingCaller);

สายที่สนทนาอยู่

ใช้เมธอด forOngoingCall() เพื่อสร้างการแจ้งเตือนรูปแบบการโทรสำหรับ สายที่สนทนาอยู่

Kotlin

// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forOngoingCall(caller, hangupIntent))
    .addPerson(second_caller)

Java

// Create a call style notification for an ongoing call.
Notification.Builder builder = new Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOngoingCall(caller, hangupIntent))
    .addPerson(second_caller);

สกรีนสายเรียกเข้า

ใช้เมธอด forScreeningCall() เพื่อสร้างการแจ้งเตือนรูปแบบการโทรสำหรับ การสกรีนสายเรียกเข้า

Kotlin

// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller)

Java

// Create a call style notification for screening a call.
Notification.Builder builder = new Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

ให้ความเข้ากันได้ใน Android เวอร์ชันต่างๆ มากขึ้น

เชื่อมโยงการแจ้งเตือน CallStyle ใน API เวอร์ชัน 30 หรือเวอร์ชันก่อนหน้าด้วย บริการที่ทำงานอยู่เบื้องหน้าเพื่อกำหนดอันดับที่สูงที่ผู้ใช้ได้รับใน API ระดับ 31 ขึ้นไป นอกจากนี้ยังมีการแจ้งเตือน CallStyle รายการใน API เวอร์ชัน 30 หรือก่อนหน้า จะได้อันดับที่คล้ายกันโดยการทำเครื่องหมายการแจ้งเตือนเป็น ตามสี โดยใช้เมธอด setColorized()

ใช้ Telecom API กับการแจ้งเตือนของ CallStyle สำหรับข้อมูลเพิ่มเติม โปรดดู ภาพรวมเฟรมเวิร์กด้านโทรคมนาคม