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

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

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

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

คลาส ConnectionService ที่จัดการด้วยตนเองยังช่วยให้นักพัฒนาแอปมีโอกาส เลือกใช้การบันทึกการโทรในแอปของตนลงในบันทึกการโทรของระบบ (ดู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 ที่ส่งคืนจะแสดงชื่อของ แอปที่เชื่อมโยงกับรายการบันทึกการโทรจากแอปการโทรของบุคคลที่สาม

การควบคุมการผสานรวมบันทึกการโทรผ่าน VoIP

ตั้งแต่ Android 17 (API ระดับ 37) เป็นต้นไป แอปการโทรผ่าน VoIP ของบุคคลที่สาม ที่ผสานรวมกับ Core-Telecom และ CallsManager จะเขียนประวัติการโทร ลงในบันทึกการโทรของระบบ Android ดั้งเดิม (CallLog.Calls) ได้โดยตรง

เพื่อให้มั่นใจว่าความเป็นส่วนตัวของผู้ใช้และการจัดระเบียบข้อมูลจะสอดคล้องกันทั่วทั้งระบบนิเวศของ Android อุปกรณ์ Android 17 (ระดับ API 37) ขึ้นไปทั้งหมดที่ประกาศแฟล็กฟีเจอร์โทรคมนาคม (android.software.telecom) และมีบทบาท android.app.role.DIALER ต้องรองรับการควบคุมการผสานรวมบันทึกการโทรผ่าน VoIP ต่อแอปตามเอกสารนิยามความเข้ากันได้ (CDD) ของ Android

ข้อกำหนดในการใช้งานอุปกรณ์

อุปกรณ์ต้องมีหน้าจอการตั้งค่าที่ผู้ใช้เข้าถึงได้ (โดยปกติจะอยู่ที่ การตั้งค่า > บัญชีการโทร > บันทึกการโทรที่ผสานรวม) ซึ่งช่วยให้ผู้ใช้ ดูและเปิด/ปิดการผสานรวมบันทึกการโทรสำหรับแอป VoIP ของบุคคลที่สามแต่ละแอปได้

หากต้องการปฏิบัติตามข้อกำหนดนี้ คุณต้องผสานรวมค่าเริ่มต้นของแพลตฟอร์มสต็อก

  • การผสานรวมการตั้งค่าแพลตฟอร์ม: ตรวจสอบว่าอุปกรณ์มี com.android.phone.settings.PhoneAccountSettingsActivity ที่ แพลตฟอร์ม Android จัดเตรียมให้ตั้งแต่แกะกล่อง (com.android.phone)
  • ข้อกำหนดในการแก้ปัญหา Intent: อุปกรณ์ของคุณต้องแก้ปัญหา Intent TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION (android.telecom.action.CONFIGURE_CALL_LOG_INTEGRATION) ไปยัง หน้าจอการจัดการแพลตฟอร์มหุ้น

เมื่อแอป พรอมต์ของระบบ หรือ Deep Link เรียกใช้รายการต่อไปนี้ ความตั้งใจต้องเปิดใช้PhoneAccountSettingsActivityได้สำเร็จและต้องไม่แสดงActivityNotFoundException

Intent intent = new Intent(TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION);
context.startActivity(intent);

การตรวจสอบ

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

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

    mmma packages/services/Telecomm/testapps/

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

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

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

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

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

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

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

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

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

การควบคุมการผสานรวมบันทึกการโทรผ่าน VoIP

หากต้องการยืนยันการปฏิบัติตามข้อกำหนดเกี่ยวกับเจตนาในการผสานรวมบันทึกการโทรผ่าน VoIP ใน Android 17 ขึ้นไป ให้เรียกใช้การทดสอบ CtsTelecomTestCasesชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) การทดสอบนี้จะยืนยันข้ามขอบเขตแพ็กเกจว่าการส่ง TelecomManager#ACTION_CONFIGURE_CALL_LOG_INTEGRATION (android.telecom.action.CONFIGURE_CALL_LOG_INTEGRATION) จะได้รับการแก้ไขในอุปกรณ์ เป็นตัวแฮนเดิลกิจกรรมที่ส่งออกที่ถูกต้อง (resolveActivity ตรวจสอบ)