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 ที่กำลังดำเนินอยู่](https://source.android.google.cn/static/docs/core/connect/images/incoming-call-3p-call-app.png?authuser=9&hl=th)
แอปโทรออกของคุณสามารถตรวจสอบได้ว่าสายเรียกเข้าทำให้สายอื่นถูกตัดการเชื่อมต่อหรือไม่ โดยการตรวจสอบ การโทรพิเศษ ตรวจสอบให้แน่ใจว่า EXTRA_ANSWERING_DROPS_FG_CALL
ตั้งค่าเป็น TRUE
และ EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME
ตั้งค่าเป็นชื่อของแอปที่การโทรถูกตัดการเชื่อมต่อเมื่อรับสายมือถือที่เข้ามา
รายการบันทึกการโทรจากแอปการโทรของ 3P
นักพัฒนาแอปการโทรแบบ 3P สามารถเลือกให้มีการโทรในแอปของตนบันทึกไว้ในบันทึกการโทรของระบบ (ดู EXTRA_LOG_SELF_MANAGED_CALLS
) ซึ่งหมายความว่าเป็นไปได้ที่จะมีรายการในบันทึกการโทรที่ไม่ใช่สำหรับการโทรผ่านเครือข่ายมือถือ
เมื่อแอปตัวเรียกเลขหมาย AOSP แสดงรายการบันทึกการโทรที่เกี่ยวข้องกับแอปการโทรแบบ 3P ชื่อของแอปที่มีการโทรนั้นจะแสดงในบันทึกการโทร ดังภาพประกอบด้านล่าง:
![รายการบันทึกการโทรด้วยแอปการโทร 3P](https://source.android.google.cn/static/docs/core/connect/images/call-log-entry-3p.png?authuser=9&hl=th)
หากต้องการระบุชื่อแอปที่เชื่อมโยงกับรายการบันทึกการโทร ให้ใช้คอลัมน์ 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/
สร้างแอปทดสอบจากรูทของแหล่งเก็บข้อมูล Android ของคุณโดยใช้:
mmma packages/services/Telecomm/testapps/
ติดตั้ง build apk โดยใช้
adb install -g -r <apk path>
จากนั้นไอคอนตัวอย่างที่จัดการด้วยตนเองจะถูกเพิ่มลงในตัวเรียกใช้งานของคุณแตะไอคอนเพื่อเปิดแอปพลิเคชันทดสอบ
การจัดการสายเรียกเข้าซึ่งจะตัดการเชื่อมต่อสายที่กำลังสนทนาอยู่
ทำตามขั้นตอนเหล่านี้เพื่อตรวจสอบว่าสายเรียกเข้าตัดการเชื่อมต่อสาย 3P ที่กำลังดำเนินอยู่
![ทดสอบแอปพลิเคชันสำหรับแอปการโทร 3P](https://source.android.google.cn/static/docs/core/connect/images/test-app-3p-call.png?authuser=9&hl=th)
- ยกเลิกการเลือกตัวเลือก Holdable
- แตะ OUTGOING เพื่อเริ่มการโทรออกตัวอย่างใหม่
- แตะปุ่ม ACTIVE เพื่อให้การโทรใช้งานได้
- โทรไปยังหมายเลขโทรศัพท์ของอุปกรณ์ที่กำลังทดสอบด้วยโทรศัพท์เครื่องอื่น สิ่งนี้จะเรียกใช้สถานการณ์ที่ตัวเรียกเลขหมายของคุณได้รับชื่อของแอพ ซึ่งจะตัดการเชื่อมต่อการโทร
- เมื่อดำเนินการเสร็จแล้ว ให้แตะปุ่ม DISCONNECT ในแอปทดสอบ
รายการบันทึกการโทรจากแอปการโทรของ 3P
หลังจากทำตามขั้นตอนข้างต้นเสร็จแล้ว แอปทดสอบควรบันทึกการโทรลงในบันทึกการโทรของระบบ เพื่อยืนยันอุปกรณ์บันทึกการโทรจากแอปการโทรของ 3P ให้เปิดแอปโทรออกและยืนยันว่าการโทรปรากฏในบันทึกการโทรของระบบ