ใน Android 12.0 (ระดับ API 31) ขึ้นไป ระบบจะให้เทมเพลตการแจ้งเตือน CallStyle เพื่อแยกการแจ้งเตือนสายเรียกเข้าจากการแจ้งเตือนประเภทอื่นๆ ใช้เทมเพลตนี้เพื่อสร้างการแจ้งเตือนสายเรียกเข้าหรือ
สายที่กำลังโทร เทมเพลตนี้รองรับการแจ้งเตือนรูปแบบขนาดใหญ่
ซึ่งมีข้อมูลผู้โทรและดำเนินการที่จำเป็น เช่น การรับสายหรือ
ปฏิเสธสาย
เนื่องจากสายเรียกเข้าและสายที่กำลังสนทนาเป็นเหตุการณ์ที่มีลำดับความสำคัญสูง การแจ้งเตือนเหล่านี้จึงได้รับลำดับความสำคัญสูงสุดในหน้าต่างแจ้งเตือน การจัดอันดับนี้ยังช่วยให้ ระบบส่งต่อสายที่จัดลำดับความสำคัญเหล่านี้ไปยังอุปกรณ์อื่นๆ ได้ด้วย
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การแจ้งเตือน ดูข้อมูลเพิ่มเติมได้ที่
ภาพรวมของเฟรมเวิร์กโทรคมนาคม