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

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/

  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. เมื่อเสร็จแล้ว ให้แตะปุ่มยกเลิกการเชื่อมต่อในแอปทดสอบ

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

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