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

ใน 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 การแจ้งเตือนมีดังนี้

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

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

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

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

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

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

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

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

ใช้วิธี forScreeningCall() เพื่อสร้างการแจ้งเตือนสไตล์การโทรสำหรับการ คัดกรองสาย

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

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

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

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