Android 9 มี API เพื่อรองรับแอป
การโทรของบุคคลที่สามได้ดียิ่งขึ้น แอปการโทรของบุคคลที่สามมักจะใช้ Telephony API เช่น การออกอากาศ PHONE_STATE
เพื่อทำงานร่วมกับโทรศัพท์ของผู้ให้บริการ ด้วยเหตุนี้ แอปการโทรของบุคคลที่สามจึงต้องให้ความสำคัญกับการโทรผ่านผู้ให้บริการก่อน และมักใช้วิธีปฏิเสธสายเรียกเข้าในแอปโดยอัตโนมัติ หรือตัดสายที่โทรอยู่เพื่อเปิดทางให้สายที่โทรผ่านผู้ให้บริการ
API ใน Android 9 รองรับสถานการณ์การโทรพร้อมกันระหว่างแอปของบุคคลที่สามและการโทรของผู้ให้บริการ ซึ่งทำให้คุณรับสายเรียกเข้าจากบุคคลที่สามได้ขณะที่อยู่ระหว่างการโทรผ่านผู้ให้บริการเครือข่าย โดยเฟรมเวิร์กนี้จะมีหน้าที่รับผิดชอบในการตรวจสอบว่าสายของผู้ให้บริการถูกระงับเมื่อผู้ใช้มีส่วนร่วมในการโทรของบุคคลที่สาม
ใน Android 9 เราขอแนะนำให้แอปการโทรของบุคคลที่สามใช้ ConnectionService
API ที่จัดการด้วยตนเอง ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีสร้างแอปการโทรโดยใช้ API นี้ได้ที่หัวข้อสร้างแอปการโทร
ConnectionService
API ที่จัดการเองยังเปิดโอกาสให้นักพัฒนาแอปเลือกรับการบันทึกการโทรในแอปของตนไว้ในบันทึกการโทรของระบบด้วย (ดู EXTRA_LOG_SELF_MANAGED_CALLS
) ตามข้อกำหนดในเอกสารคำจำกัดความความเข้ากันได้ของ Android (CDD) (ส่วนที่ 7.4.1.2) คุณควรตรวจสอบว่าเครื่องมือโทรหรือแอปโทรศัพท์แสดงรายการบันทึกการโทรเหล่านี้และแสดงชื่อแอปการโทรของบุคคลที่สามที่เป็นต้นทางของการโทร (ดูตัวอย่างวิธีที่แอปโทรศัพท์ AOSP ปฏิบัติตามข้อกำหนดนี้ได้ที่รายการบันทึกการโทรจากแอปการโทรของบุคคลที่สาม)
แอปมีหน้าที่รับผิดชอบในการตั้งค่า CAPABILITY_SUPPORT_HOLD
และ CAPABILITY_HOLD
ในการเชื่อมต่อของแอป อย่างไรก็ตาม อาจเป็นไปได้ว่าแอปไม่สามารถ
พักสายได้ในบางสถานการณ์ เฟรมเวิร์กนี้มีข้อกำหนดสำหรับการแก้ไขเคสประเภทเหล่านี้
สถานการณ์
คุณควรแก้ไขแอปโทรศัพท์เพื่อจัดการกับสถานการณ์ต่อไปนี้
จัดการสายเรียกเข้าที่ตัดการเชื่อมต่อสายที่โทรอยู่
ในกรณีที่มีการโทรจากบุคคลที่สามที่ยังไม่สิ้นสุด (เช่น ในการโทรผ่าน SuperCaller) ซึ่งไม่รองรับการถือสาย และผู้ใช้ได้รับการโทรทางมือถือ (เช่น ใช้ผู้ให้บริการ FooCom) แอปโทรศัพท์หรือแป้นโทรศัพท์ควรแจ้งให้ผู้ใช้ทราบว่าการตอบสายจากเครือข่ายมือถือจะเป็นการสิ้นสุดการโทรจากบุคคลที่สามที่ยังไม่สิ้นสุด
ประสบการณ์ของผู้ใช้นี้สำคัญเนื่องจากแอปการโทรของบุคคลที่สามอาจมีสายที่โทรอยู่ซึ่งเฟรมเวิร์กไม่สามารถระงับได้ การรับสายบนอุปกรณ์เคลื่อนที่ใหม่จะทำให้ การโทรของบุคคลที่สามที่ดำเนินอยู่ถูกตัดการเชื่อมต่อ
โปรดดูอินเทอร์เฟซผู้ใช้ในรูปสำหรับตัวอย่าง
รูปที่ 1 สายเรียกเข้าตัดการเชื่อมต่อการโทรกับบุคคลที่สามที่ดำเนินอยู่
แอปโทรศัพท์สามารถตรวจสอบว่าสายเรียกเข้าทำให้สายอื่นถูกตัดการเชื่อมต่อหรือไม่โดยดูที่ส่วนเสริมการโทร
ตรวจสอบว่าได้ตั้งค่า EXTRA_ANSWERING_DROPS_FG_CALL
เป็น TRUE
และตั้งค่า EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME
เป็นชื่อแอปที่จะตัดการเชื่อมต่อการโทรเมื่อรับสายเรียกเข้าบนอุปกรณ์เคลื่อนที่
รายการบันทึกการโทรจากแอปการโทรของบุคคลที่สาม
นักพัฒนาแอปการโทรของบุคคลที่สามสามารถเลือกรับการบันทึกการโทรในแอปของตนในบันทึกการโทรของระบบได้ (ดูEXTRA_LOG_SELF_MANAGED_CALLS
) ซึ่งหมายความว่าอาจมีรายการในบันทึกการโทรที่ไม่ได้บันทึกการโทรผ่านเครือข่ายมือถือ
เมื่อแอปโทรศัพท์ AOSP แสดงรายการบันทึกการโทรที่เกี่ยวข้องกับแอปการโทรของบุคคลที่สาม ชื่อแอปที่เกิดการโทรจะแสดงในบันทึกการโทรดังที่แสดงในรูป
รูปที่ 2 รายการบันทึกการโทรที่มีชื่อแอปการโทรของบุคคลที่สามในแอปโทรศัพท์
หากต้องการระบุชื่อแอปที่เชื่อมโยงกับรายการบันทึกการโทร ให้ใช้คอลัมน์ PHONE_ACCOUNT_COMPONENT_NAME
และ PHONE_ACCOUNT_ID
ในผู้ให้บริการบันทึกการโทรเพื่อสร้างอินสแตนซ์ของ PhoneAccountHandle
ซึ่งระบุแหล่งที่มาของรายการบันทึกการโทร ค้นหา
TelecomManager
เพื่อดูรายละเอียดสำหรับ PhoneAccount
หากต้องการตรวจสอบว่ารายการบันทึกการโทรมาจากแอปการโทรของบุคคลที่สามหรือไม่ ให้ตรวจสอบความสามารถของ PhoneAccount
เพื่อดูว่ามีการตั้งค่า CAPABILITY_SELF_MANAGED
ไว้หรือไม่
เมธอด getLabel
ของ PhoneAccount
ที่แสดงผลจะแสดงชื่อแอปที่เชื่อมโยงกับรายการบันทึกการโทรจากแอปการโทรของบุคคลที่สาม
การตรวจสอบความถูกต้อง
หากต้องการทดสอบว่าอุปกรณ์รองรับแอปการโทรของบุคคลที่สามหรือไม่ ให้ใช้แอปทดสอบ Telecomm ซึ่งใช้ ConnectionService API ที่จัดการด้วยตนเอง แอปอยู่ใน/packages/services/Telecomm/testapps/
สร้างแอปทดสอบจากรูทของที่เก็บซอร์สโค้ด Android โดยใช้
mmma packages/services/Telecomm/testapps/
ติดตั้ง APK ของบิลด์โดยใช้
adb install -g -r <apk path>
จากนั้นระบบจะเพิ่มไอคอน "จัดการเอง" ลงใน Launcherแตะไอคอนเพื่อเปิดแอปทดสอบ
จัดการสายเรียกเข้าที่ตัดสายที่สนทนาอยู่
ทำตามขั้นตอนเหล่านี้เพื่อยืนยันว่าสายเรียกเข้าจะตัดการเชื่อมต่อการโทรกับบุคคลที่สามที่กำลังดำเนินอยู่
รูปที่ 3 ทดสอบแอปด้วยตัวอย่างการใช้งาน ConnectionService API
- ล้างตัวเลือกระงับได้
- แตะขาออกเพื่อเริ่มตัวอย่างการโทรออกใหม่
- แตะปุ่มใช้งานอยู่เพื่อให้การโทรใช้งานได้
- โทรหาหมายเลขโทรศัพท์ของอุปกรณ์ที่ทดสอบด้วยโทรศัพท์เครื่องอื่น ซึ่งจะเรียกใช้สถานการณ์ที่ชื่อแอประบุไว้ในโปรแกรมโทร ซึ่งจะทำให้การโทรตัดการเชื่อมต่อ
- เมื่อเสร็จแล้ว ให้แตะปุ่มยกเลิกการเชื่อมต่อในแอปทดสอบ
รายการประวัติการโทรจากแอปการโทรของบุคคลที่สาม
หลังจากทำตามขั้นตอนข้างต้นเสร็จแล้ว แอปทดสอบควรมีการบันทึกการโทรไปยังประวัติการโทรของระบบ หากต้องการยืนยันว่าอุปกรณ์บันทึกการโทรจากแอปการโทรของบุคคลที่สาม ให้เปิดแอปโทรศัพท์และยืนยันว่าการโทรปรากฏในบันทึกการโทรของระบบ