ใน 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 incoming caller. val incomingCaller = Person.Builder() .setName("Jane Doe") .setImportant(true) .build()
สายเรียกเข้า
ใช้เมธอด forIncomingCall() เพื่อสร้างการแจ้งเตือนรูปแบบการโทรสำหรับสายเรียกเข้า
// For demonstrative purposes only, should use a well-defined Intents. val contentIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE) val declineIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE) val hangupIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE) val answerIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE) // Create a call style notification for an incoming call. val builderForIncomingCall = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.ic_logo) .setStyle( NotificationCompat.CallStyle.forIncomingCall(incomingCaller, declineIntent, answerIntent)) .addPerson(incomingCaller)
สายที่สนทนาอยู่
ใช้วิธี forOngoingCall() เพื่อสร้างการแจ้งเตือนรูปแบบการโทรสำหรับการโทรที่ดำเนินอยู่
// Create a call style notification for an ongoing call. val builderForOngoingCall = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.ic_logo) .setStyle( NotificationCompat.CallStyle.forOngoingCall(callerAtOtherEnd, hangupIntent)) .addPerson(caller)
สกรีนสายเรียกเข้า
ใช้เมธอด forScreeningCall() เพื่อสร้างการแจ้งเตือนรูปแบบการโทรสำหรับการ
คัดกรองสายเรียกเข้า
// Create a call style notification for screening a call. val builder = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.ic_logo) .setStyle( NotificationCompat.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent)) .addPerson(caller)
รองรับ Android ในเวอร์ชันต่างๆ มากขึ้น
เชื่อมโยงการแจ้งเตือน CallStyle ใน API เวอร์ชัน 30 หรือก่อนหน้ากับบริการที่ทำงานอยู่เบื้องหน้าเพื่อกำหนดอันดับสูงให้กับการแจ้งเตือนเหล่านั้นในระดับ API 31 ขึ้นไป นอกจากนี้ CallStyleการแจ้งเตือนใน API เวอร์ชัน 30
หรือก่อนหน้ายังสามารถจัดอันดับที่คล้ายกันได้โดยทำเครื่องหมายการแจ้งเตือนเป็น
สีโดยใช้เมธอด setColorized()
ใช้ Telecom API กับCallStyleการแจ้งเตือน ดูข้อมูลเพิ่มเติมได้ที่
ภาพรวมเฟรมเวิร์กโทรคมนาคม