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
ซึ่งระบุแหล่งที่มาของรายการบันทึกการโทร Query
TelecomManager
เพื่อดูรายละเอียดสำหรับ PhoneAccount
หากต้องการพิจารณาว่ารายการบันทึกการโทรมาจากแอปโทรของบุคคลที่สามหรือไม่ ให้ตรวจสอบความสามารถของ PhoneAccount
เพื่อดูว่ามีการตั้งค่า CAPABILITY_SELF_MANAGED
หรือไม่
เมธอด
getLabel
ของ PhoneAccount
ที่แสดงผลจะแสดงชื่อของแอปที่เชื่อมโยง
กับรายการบันทึกการโทรจากแอปการโทรของบุคคลที่สาม
การตรวจสอบความถูกต้อง
หากต้องการทดสอบว่าอุปกรณ์รองรับแอปการโทรของบุคคลที่สามหรือไม่ ให้ใช้แอปทดสอบ Telecomm ซึ่งใช้ Self-Managed ConnectionService API แอปจะอยู่ใน
/packages/services/Telecomm/testapps/
สร้างแอปทดสอบจากรูทของที่เก็บแหล่งที่มาของ Android โดยใช้คำสั่งต่อไปนี้
mmma packages/services/Telecomm/testapps/
ติดตั้ง APK ของบิลด์โดยใช้
adb install -g -r <apk path>
จากนั้นระบบจะเพิ่มไอคอนตัวอย่างที่จัดการด้วยตนเอง ลงใน Launcherแตะไอคอนเพื่อเปิดแอปทดสอบ
จัดการสายเรียกเข้าที่ทำให้สายที่สนทนาอยู่ถูกตัด
ทำตามขั้นตอนต่อไปนี้เพื่อยืนยันว่าสายเรียกเข้าจะตัดสายเรียกของบุคคลที่สามที่กำลังดำเนินการอยู่
รูปที่ 3 ทดสอบแอปด้วยตัวอย่างการใช้งาน ConnectionService API
- ยกเลิกการเลือกตัวเลือกถือสาย
- แตะขาออกเพื่อเริ่มการโทรออกตัวอย่างใหม่
- แตะปุ่มใช้งานอยู่เพื่อให้การโทรใช้งานได้
- โทรไปยังหมายเลขโทรศัพท์ของอุปกรณ์ที่อยู่ระหว่างการทดสอบด้วยโทรศัพท์เครื่องอื่น ซึ่ง จะเรียกใช้สถานการณ์ที่โปรแกรมโทรศัพท์ของคุณได้รับชื่อแอป ซึ่งจะทำให้ระบบตัดสาย
- เมื่อเสร็จแล้ว ให้แตะปุ่มยกเลิกการเชื่อมต่อในแอปทดสอบ
รายการบันทึกการโทรจากแอปการโทรของบุคคลที่สาม
หลังจากทำตามขั้นตอนข้างต้นแล้ว แอปทดสอบควรบันทึกการเรียกไปยัง บันทึกการเรียกของระบบ หากต้องการยืนยันว่าอุปกรณ์บันทึกการโทรจากแอปการโทรของบุคคลที่สาม ให้ เปิดแอปโทรศัพท์และยืนยันว่าการโทรปรากฏในบันทึกการโทรของระบบ