รองรับแอปการโทรของบุคคลที่สาม

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/

  1. สร้างแอปทดสอบจากรูทของที่เก็บซอร์สโค้ด Android โดยใช้

    mmma packages/services/Telecomm/testapps/

  2. ติดตั้ง APK ของบิลด์โดยใช้ adb install -g -r <apk path> จากนั้นระบบจะเพิ่มไอคอน "จัดการเอง" ลงใน Launcher

  3. แตะไอคอนเพื่อเปิดแอปทดสอบ

จัดการสายเรียกเข้าที่ตัดสายที่สนทนาอยู่

ทำตามขั้นตอนเหล่านี้เพื่อยืนยันว่าสายเรียกเข้าจะตัดการเชื่อมต่อการโทรกับบุคคลที่สามที่กำลังดำเนินอยู่

ทดสอบแอปสําหรับแอปการโทรของบุคคลที่สาม

รูปที่ 3 ทดสอบแอปด้วยตัวอย่างการใช้งาน ConnectionService API

  1. ล้างตัวเลือกระงับได้
  2. แตะขาออกเพื่อเริ่มตัวอย่างการโทรออกใหม่
  3. แตะปุ่มใช้งานอยู่เพื่อให้การโทรใช้งานได้
  4. โทรหาหมายเลขโทรศัพท์ของอุปกรณ์ที่ทดสอบด้วยโทรศัพท์เครื่องอื่น ซึ่งจะเรียกใช้สถานการณ์ที่ชื่อแอประบุไว้ในโปรแกรมโทร ซึ่งจะทำให้การโทรตัดการเชื่อมต่อ
  5. เมื่อเสร็จแล้ว ให้แตะปุ่มยกเลิกการเชื่อมต่อในแอปทดสอบ

รายการประวัติการโทรจากแอปการโทรของบุคคลที่สาม

หลังจากทำตามขั้นตอนข้างต้นเสร็จแล้ว แอปทดสอบควรมีการบันทึกการโทรไปยังประวัติการโทรของระบบ หากต้องการยืนยันว่าอุปกรณ์บันทึกการโทรจากแอปการโทรของบุคคลที่สาม ให้เปิดแอปโทรศัพท์และยืนยันว่าการโทรปรากฏในบันทึกการโทรของระบบ