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

Android 9 มี API เพื่อรองรับแอปการโทรของบุคคลที่สาม (3P) ได้ดียิ่งขึ้น โดยทั่วไปแล้ว แอปการโทรแบบ 3P จะใช้ Telephony API เช่น การออกอากาศ PHONE_STATE เพื่อให้อยู่ร่วมกับการโทรของผู้ให้บริการ ด้วยเหตุนี้ แอปการโทรของ 3P จะต้องให้ความสำคัญกับการโทรของผู้ให้บริการ และมักจะหันไปใช้การปฏิเสธสายเรียกเข้าในแอปอย่างเงียบๆ หรือยุติการโทรที่กำลังดำเนินอยู่เพื่อหลีกทางให้กับการโทรของผู้ให้บริการ

API ใน Android 9 รองรับสถานการณ์การโทรพร้อมกันระหว่างแอป 3P และการโทรของผู้ให้บริการ ซึ่งช่วยให้สามารถรับสาย 3P ที่เข้ามาได้ในขณะที่กำลังใช้สายของผู้ให้บริการ กรอบงานจะรับผิดชอบในการตรวจสอบให้แน่ใจว่าการโทรของผู้ให้บริการเกิดขึ้นเมื่อผู้ใช้เข้าร่วมการโทรแบบ 3P

ใน Android 9 แอปการโทรแบบ 3P ได้รับการสนับสนุนให้ใช้ ConnectionService API ที่จัดการด้วยตนเอง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีสร้างแอปการโทรโดยใช้ API นี้ โปรดดูที่ สร้างแอปการโทร

ConnectionService API ที่จัดการด้วยตนเองยังเปิดโอกาสให้นักพัฒนาสามารถเลือกให้มีการโทรในแอปของตนบันทึกไว้ในบันทึกการโทรของระบบ (ดู EXTRA_LOG_SELF_MANAGED_CALLS ) ตามข้อกำหนดใน เอกสารคำจำกัดความความเข้ากันได้ของ Android (CDD) (ส่วนที่ 7.4.1.2) คุณควรตรวจสอบให้แน่ใจว่าแอปโทรออก/โทรศัพท์ของคุณแสดงรายการบันทึกการโทรเหล่านี้ และแสดงชื่อของแอปการโทร 3P ที่มีการโทรเกิดขึ้น (สำหรับตัวอย่าง วิธีที่แอปตัวเรียกเลขหมาย AOSP ตรงตามข้อกำหนดนี้ โปรดดู รายการบันทึกการโทรจากแอปการโทรของ 3P )

แอปมีหน้าที่รับผิดชอบในการตั้งค่า CAPABILITY_SUPPORT_HOLD และ CAPABILITY_HOLD บนการเชื่อมต่อของแอป อย่างไรก็ตาม อาจเป็นไปได้ที่แอปไม่สามารถพักสายได้ในบางกรณี กรอบการทำงานประกอบด้วยข้อกำหนดสำหรับการแก้ไขคดีประเภทนี้

สถานการณ์

คุณควรแก้ไขแอปตัวเรียกเลขหมายของคุณเพื่อจัดการกับสถานการณ์ต่อไปนี้

การจัดการสายเรียกเข้าที่ตัดการเชื่อมต่อสายที่กำลังสนทนาอยู่

ในสถานการณ์ที่มีการโทรแบบ 3P อย่างต่อเนื่อง (เช่น ในการโทรแบบ SuperCaller) ที่ไม่รองรับการพักสาย และผู้ใช้ได้รับสายจากโทรศัพท์มือถือ (เช่น ผ่านผู้ให้บริการ FooCom) แอป Dialer/Phone ของคุณควรแจ้งให้ผู้ใช้ทราบว่ารับสาย การโทรผ่านเครือข่ายมือถือจะสิ้นสุดการโทร 3P ที่กำลังดำเนินอยู่

ประสบการณ์ผู้ใช้นี้มีความสำคัญเนื่องจากแอปการโทรแบบ 3P อาจมีการโทรอย่างต่อเนื่องซึ่งเฟรมเวิร์กไม่สามารถระงับได้ การรับสายมือถือใหม่จะทำให้การโทร 3P ที่กำลังดำเนินอยู่ถูกตัดการเชื่อมต่อ

ดูอินเทอร์เฟซผู้ใช้ด้านล่างสำหรับตัวอย่าง:

สายเรียกเข้าตัดการเชื่อมต่อสาย 3P ที่กำลังดำเนินอยู่
รูปที่ 1. สายเรียกเข้าซึ่งจะตัดการเชื่อมต่อสาย 3P ที่กำลังดำเนินอยู่

แอปโทรออกของคุณสามารถตรวจสอบได้ว่าสายเรียกเข้าทำให้สายอื่นถูกตัดการเชื่อมต่อหรือไม่ โดยการตรวจสอบ การโทรพิเศษ ตรวจสอบให้แน่ใจว่า EXTRA_ANSWERING_DROPS_FG_CALL ตั้งค่าเป็น TRUE และ EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME ตั้งค่าเป็นชื่อของแอปที่การโทรถูกตัดการเชื่อมต่อเมื่อรับสายมือถือที่เข้ามา

รายการบันทึกการโทรจากแอปการโทรของ 3P

นักพัฒนาแอปการโทรแบบ 3P สามารถเลือกให้มีการโทรในแอปของตนบันทึกไว้ในบันทึกการโทรของระบบ (ดู EXTRA_LOG_SELF_MANAGED_CALLS ) ซึ่งหมายความว่าเป็นไปได้ที่จะมีรายการในบันทึกการโทรที่ไม่ใช่สำหรับการโทรผ่านเครือข่ายมือถือ

เมื่อแอปตัวเรียกเลขหมาย AOSP แสดงรายการบันทึกการโทรที่เกี่ยวข้องกับแอปการโทรแบบ 3P ชื่อของแอปที่มีการโทรนั้นจะแสดงในบันทึกการโทร ดังภาพประกอบด้านล่าง:

รายการบันทึกการโทรด้วยแอปการโทร 3P
รูปที่ 2 รายการบันทึกการโทรพร้อมชื่อแอปการโทร 3P บนแอปโทรออก

หากต้องการระบุชื่อแอปที่เชื่อมโยงกับรายการบันทึกการโทร ให้ใช้คอลัมน์ PHONE_ACCOUNT_COMPONENT_NAME และ PHONE_ACCOUNT_ID ในผู้ให้บริการบันทึกการโทรเพื่อสร้างอินสแตนซ์ของ PhoneAccountHandle ซึ่งระบุแหล่งที่มาของรายการบันทึกการโทร แบบสอบถาม TelecomManager เพื่อรับรายละเอียดสำหรับ PhoneAccount
หากต้องการตรวจสอบว่ารายการบันทึกการโทรมาจากแอปการโทร 3P หรือไม่ ให้ตรวจสอบ ความสามารถของ PhoneAccount เพื่อดูว่า CAPABILITY_SELF_MANAGED ได้รับการตั้งค่าไว้หรือไม่

เมธอด getLabel ของ PhoneAccount ที่ส่งคืนจะส่งคืนชื่อของแอปที่เชื่อมโยงกับรายการบันทึกการโทรจากแอปการโทร 3P

การตรวจสอบ

หากต้องการทดสอบว่าอุปกรณ์ของคุณรองรับแอปการโทรแบบ 3P ให้ใช้แอปพลิเคชันทดสอบ Telecomm ซึ่งใช้ ConnectionService API ที่จัดการด้วยตนเอง แอปพลิเคชันอยู่ใน /packages/services/Telecomm/testapps/

  1. สร้างแอปทดสอบจากรูทของแหล่งเก็บข้อมูล Android ของคุณโดยใช้:

    mmma packages/services/Telecomm/testapps/

  2. ติดตั้ง build apk โดยใช้ adb install -g -r <apk path> จากนั้นไอคอนตัวอย่างที่จัดการด้วยตนเองจะถูกเพิ่มลงในตัวเรียกใช้งานของคุณ

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

การจัดการสายเรียกเข้าซึ่งจะตัดการเชื่อมต่อสายที่กำลังสนทนาอยู่

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

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

รายการบันทึกการโทรจากแอปการโทรของ 3P

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