Android 9 เปิดตัวอินเทอร์เฟซ SystemApi ใหม่ชื่อ ImsService เพื่อช่วยในการใช้งานระบบย่อยของ IP Multimedia (IMS) ImsService API คือ อินเทอร์เฟซที่กำหนดไว้อย่างดีระหว่างแพลตฟอร์ม Android และผู้ให้บริการ หรือ การใช้ IMS ของผู้ให้บริการขนส่ง
รูปที่ 1 ภาพรวมของ ImsService
การใช้อินเทอร์เฟซ ImsService นั้น ผู้ติดตั้งใช้งาน IMS สามารถให้ การส่งสัญญาณข้อมูลไปยังแพลตฟอร์ม เช่น ข้อมูลการลงทะเบียน IMS, SMS ผ่านการผสานรวม IMS และการผสานรวมฟีเจอร์ของ MmTel เพื่อมอบเสียงและวิดีโอ การโทร ImsService API ก็เป็น API ระบบ Android เช่นกัน ซึ่งหมายความว่า สร้างขึ้นโดยเทียบกับ Android SDK โดยตรงแทนที่จะดำเนินการกับแหล่งที่มา IMS แอปที่ติดตั้งล่วงหน้าในอุปกรณ์ยังสามารถกำหนดค่า สามารถอัปเดต Play Store ได้
ตัวอย่างและแหล่งที่มา
Android มีแอปบน AOSP ที่นำส่วนต่างๆ ของ ImsService API เพื่อการทดสอบและพัฒนา คุณสามารถค้นหา แอปที่ /testapps/ImsTestService
คุณสามารถดูเอกสารเกี่ยวกับ ImsService API ได้ใน ImsService และในชั้นเรียนอื่นๆ ใน API
การใช้งาน
ImsService API คือ API ระดับสูงที่ช่วยให้คุณนำ IMS มาใช้ได้หลายวิธี โดยขึ้นอยู่กับฮาร์ดแวร์ที่มี ตัวอย่างเช่น การเปลี่ยนแปลงการติดตั้งใช้งาน ขึ้นอยู่กับว่าการใช้งาน IMS จะปรากฏในแอปโดยสมบูรณ์ หรือมีการทำงานบางส่วนหรือทั้งหมดไปยังโมเด็ม Android ไม่ ไม่ให้ HAL สาธารณะสำหรับการกระจายข้อมูลไปยังโปรเซสเซอร์เบสแบนด์ ดังนั้น การโหลดจะต้องเกิดขึ้นโดยใช้ส่วนขยาย HAL ของคุณกับโมเด็ม
ความเข้ากันได้กับการใช้งาน IMS รุ่นเก่า
แม้ว่า Android 9 จะมี ImsService API รวมอยู่ด้วย
อุปกรณ์ที่ใช้ IMS เวอร์ชันเก่าจะไม่รองรับ API นี้
สำหรับอุปกรณ์เหล่านี้ ระบบได้ย้ายอินเทอร์เฟซ AIDL และคลาส Wrapper เก่าแล้ว
กับเนมสเปซ android.telephony.ims.compat
เมื่ออัปเกรดเป็น Android
9 อุปกรณ์รุ่นเก่าต้องดำเนินการต่อไปนี้เพื่อดำเนินการต่อ
การรองรับของ API รุ่นเก่า
- เปลี่ยนเนมสเปซของการใช้งาน ImsService เพื่อขยายจาก
Namespace API
android.telephony.ims.compat
รายการ - แก้ไขคำจำกัดความของบริการ ImsService ใน AndroidManifest.xml เพื่อใช้
android.telephony.ims.compat.ImsService
การดำเนินการของตัวกรอง Intent แทน การดำเนินการandroid.telephony.ims.ImsService
จากนั้นเฟรมเวิร์กจะเชื่อมโยงกับ ImsService โดยใช้เลเยอร์ความเข้ากันได้
ที่ให้ไว้ใน Android 9 เพื่อให้ทำงานกับ
การใช้งาน ImsService
การลงทะเบียน ImsService กับเฟรมเวิร์ก
ImsService API มีการใช้งานในฐานะบริการ ซึ่งเฟรมเวิร์ก Android
เพื่อสื่อสารกับการติดตั้งใช้งาน IMS มี 3 ขั้นตอนดังนี้
ที่จำเป็นต่อการลงทะเบียนแอปที่ใช้ ImsService ด้วย
ประการแรก การติดตั้งใช้งาน ImsService ต้องลงทะเบียนตนเองกับ
โดยใช้ AndroidManifest.xml
ของแอป อย่างที่สอง ต้อง
กำหนดฟีเจอร์ IMS ที่การใช้งานรองรับ (MmTel หรือ RCS) และข้อ 3
อุปกรณ์ดังกล่าวต้องได้รับการยืนยันว่าเป็นการใช้งาน IMS ที่เชื่อถือได้
การกำหนดค่าหรือการวางซ้อนอุปกรณ์
คำจำกัดความของบริการ
แอป IMS จะลงทะเบียน ImsService กับเฟรมเวิร์กนี้ด้วยการเพิ่ม
service
จะป้อนไฟล์ Manifest โดยใช้รูปแบบต่อไปนี้
<service
android:name="com.egcorp.ims.EgImsService"
android:directBootAware="true"
Android:persistent="true"
...
android:permission="android.permission.BIND_IMS_SERVICE" >
...
<intent-filter>
<action android:name="android.telephony.ims.ImsService" />
</intent-filter>
</service>
คำจำกัดความ service
ใน AndroidManifest.xml
กำหนดสิ่งต่อไปนี้
ซึ่งจำเป็นสำหรับการดำเนินการที่ถูกต้อง
directBootAware="true"
: อนุญาตให้ค้นพบและเรียกใช้บริการtelephony
ก่อนที่ผู้ใช้จะปลดล็อกอุปกรณ์ บริการไม่สามารถเข้าถึงได้ พื้นที่เก็บข้อมูลที่มีการเข้ารหัสของอุปกรณ์ก่อนที่ผู้ใช้จะปลดล็อกอุปกรณ์ สำหรับข้อมูลเพิ่มเติม ดูข้อมูลได้ที่ โหมดเปิดเครื่องโดยตรงสำหรับการสนับสนุน และ การเข้ารหัสตามไฟล์persistent="true"
: อนุญาตให้เรียกใช้บริการนี้อย่างถาวรและไม่ ระบบหยุดการทำงานเพื่อเรียกคืนหน่วยความจำ แอตทริบิวต์นี้จะใช้ได้เฉพาะเมื่อ เป็นแอประบบpermission="android.permission.BIND_IMS_SERVICE"
: ตรวจสอบว่ามีเพียง กระบวนการที่ได้รับสิทธิ์BIND_IMS_SERVICE
จะสามารถ เชื่อมโยงกับแอป วิธีนี้จะช่วยป้องกันไม่ให้แอปหลอกลวงเชื่อมโยงกับ เนื่องจากมีเพียงแอประบบเท่านั้นที่สามารถได้รับอนุญาตจาก
บริการต้องระบุองค์ประกอบ intent-filter
ที่มีการดำเนินการด้วย
android.telephony.ims.ImsService
ซึ่งช่วยให้เฟรมเวิร์กค้นหา
ImsService
ข้อกำหนดของฟีเจอร์ IMS
หลังจาก ImsService ได้รับการกำหนดให้เป็นบริการ Android ใน AndroidManifest.xml นั้น ImsService ต้องกำหนดฟีเจอร์ IMS ที่รองรับ ปัจจุบัน Android รองรับฟีเจอร์ MmTel และ RCS แต่มีเพียง MmTel เท่านั้น ผสานรวมอยู่ในเฟรมเวิร์ก แม้ว่าจะไม่มี RCS API ที่ผสานรวมอยู่ใน เฟรมเวิร์กนี้ก็ยังมีข้อได้เปรียบในการประกาศว่าเป็นฟีเจอร์ของ ImsService
ด้านล่างนี้คือฟีเจอร์ที่ถูกต้องซึ่งกำหนดไว้ใน android.telephony.ims.ImsFeature
ซึ่ง
ImsService สามารถให้คำอธิบายและตัวอย่างว่าเหตุใด IMS
จะใช้คุณลักษณะเหล่านี้อย่างใดอย่างหนึ่งหรือทั้งหมด หลังแต่ละรายการ
ที่กำหนดไว้ หน้านี้จะแสดงวิธีที่ ImsService
ประกาศชุดของ
ฟีเจอร์ที่กำหนดไว้สำหรับแต่ละช่องซิม
FEATURE_MMTEL
ImsService
ใช้ฟีเจอร์ IMS MMTEL ซึ่งมีการรองรับ
สื่อ IMS ทั้งหมด (ข้อกำหนดเฉพาะ IR.92 และ IR.94) ยกเว้นการติดฉุกเฉินกับอุปกรณ์
IMS PDN สำหรับการโทรหาหมายเลขฉุกเฉิน การใช้งาน ImsService
ใดๆ ที่ต้องการ
การสนับสนุนคุณลักษณะ MMTEL ควรขยาย
android.telephony.ims.MmTelFeature
คลาสและแสดงผล
การใช้งาน MmTelFeature
ใน
ImsService#createMmTelFeature
FEATURE_EMERGENCY_MMTEL
การประกาศฟีเจอร์นี้จะส่งสัญญาณไปยังแพลตฟอร์มที่ต่อเชื่อมกับกรณีฉุกเฉินเท่านั้น
เป็นไปได้ด้วย IMS PDN สำหรับบริการช่วยเหลือฉุกเฉิน หากไม่ได้ประกาศฟีเจอร์นี้สำหรับ
ImsService
ของคุณ แพลตฟอร์มจะใช้ค่าเริ่มต้นเป็น Circuit Switch Fallback เสมอ
สำหรับบริการช่วยเหลือฉุกเฉิน ต้องกำหนดฟีเจอร์ FEATURE_MMTEL
คุณลักษณะที่จะกำหนด
FEATURE_RCS
ImsService API ไม่ได้ใช้ฟีเจอร์ RCS ใดๆ ของ IMS แต่
แต่คลาสพื้นฐาน android.telephony.ims.RcsFeature
รายการก็ยังคงมีประโยชน์ เฟรมเวิร์ก
เชื่อมโยงกับ ImsService โดยอัตโนมัติแล้วโทรไปที่ ImsService#createRcsFeature
เมื่อตรวจพบว่าแพ็กเกจควรให้บริการ RCS หากซิมการ์ดที่เชื่อมโยง
เมื่อนำบริการ RCS ออกแล้ว เฟรมเวิร์กจะเรียกใช้โดยอัตโนมัติ
RcsFeature#onFeatureRemoved
แล้วล้าง ImsService
ที่เชื่อมโยง
ด้วยฟีเจอร์ RCS ฟังก์ชันนี้สามารถลบการกำหนดค่า
การตรวจจับหรือตรรกะการเชื่อมโยงที่ฟีเจอร์ RCS จะต้องมี
การลงทะเบียนของฟีเจอร์ที่รองรับ
ก่อนอื่น เฟรมเวิร์กโทรศัพท์จะผูกกับ ImsService เพื่อค้นหาฟีเจอร์ที่
ที่รองรับโดยใช้ ImsService#querySupportedImsFeatures
API หลังจาก
จะคำนวณคุณสมบัติที่ ImsService จะรองรับ
ImsService#create[...]Feature
สำหรับแต่ละฟีเจอร์ที่จะทำการ ImsService
เป็นผู้รับผิดชอบ หากมีการเปลี่ยนแปลงฟีเจอร์ที่แอป IMS รองรับ
สามารถใช้ ImsService#onUpdateSupportedImsFeatures
เพื่อส่งสัญญาณแจ้งเฟรมเวิร์กไปยัง
คำนวณฟีเจอร์ที่รองรับอีกครั้ง ดูแผนภาพต่อไปนี้สำหรับข้อมูลเพิ่มเติม
ในการเริ่มต้นและผูกมัด ImsService
รูปที่ 2: การเริ่มต้นและการเชื่อมโยง ImsService
การตรวจหาและการยืนยันการติดตั้งใช้งาน ImsService
เมื่อกำหนด ImsService ไว้อย่างถูกต้องใน AndroidManifest.xml แล้ว ต้องได้รับการกำหนดค่าให้เชื่อมโยงกับ ImsService (ปลอดภัย) เมื่อ เหมาะสม ImsServices ที่มี 2 ประเภทที่กรอบจะผูกมัดด้วย ได้แก่
- "ลบล้าง" ผู้ให้บริการ ImsService: บริการ ImsServices เหล่านี้จะถูกโหลดล่วงหน้าไว้ใน
แต่ติดอยู่กับผู้ให้บริการเครือข่ายมือถืออย่างน้อย 1 รายและจะ
เชื่อมโยงเมื่อใส่ซิมการ์ดที่ตรงกัน ซึ่งกำหนดค่าโดยใช้
config_ims_mmtel_package_override_string
คีย์ CarrierConfig สำหรับ ImsServices ที่ใช้ฟีเจอร์ MMTELconfig_ims_rcs_package_override_string
สำหรับ ImsServices ที่ใช้ฟีเจอร์ RCS
- อุปกรณ์ "เริ่มต้น" ImsService: นี่คือ ImsService เริ่มต้นที่โหลด
ติดมากับอุปกรณ์โดย OEM และควรออกแบบมาเพื่อให้บริการ IMS ใน
ทุกกรณีที่ผู้ให้บริการ ImsService ไม่พร้อมให้บริการและมีประโยชน์
สถานการณ์ที่อุปกรณ์ไม่ได้ใส่ซิมการ์ดหรือใส่ซิมการ์ด
ไม่ได้ติดตั้งผู้ให้บริการ ImsService ไว้ นี่คือ
ที่กำหนดไว้ในการวางซ้อนอุปกรณ์โดยใช้การกำหนดค่าต่อไปนี้
config_ims_mmtel_package
: ใช้ฟีเจอร์ MMTELconfig_ims_rcs_package
: ใช้ฟีเจอร์ RCS
Android ไม่รองรับแอปที่มี ImsService ที่ดาวน์โหลดได้ของบุคคลที่สาม ดังนั้นการใช้งาน ImsService ใดๆ ที่กำหนดไว้ในที่นี้ ต้องเป็นแอประบบและต้องอยู่ใน /system/priv-app/ หรือ /product/priv-app/ โฟลเดอร์ เพื่อให้สิทธิ์ที่เหมาะสม (ได้แก่ โทรศัพท์ ไมโครโฟน ตำแหน่ง กล้อง และรายชื่อติดต่อ) โดยการยืนยันว่า ชื่อแพ็กเกจของการใช้งาน IMS ตรงกับ CarrierConfig หรืออุปกรณ์ ค่าการวางซ้อนที่กำหนดไว้ข้างต้น เฉพาะแอปที่ติดตั้งไว้ล่วงหน้าที่เชื่อถือได้เท่านั้น ขอบเขต
การปรับแต่ง
แอปที่ใช้ ImsService จะมีผลเฉพาะบนอุปกรณ์ที่
มีการกำหนดค่าเป็น "ลบล้าง" ผู้ให้บริการ ImsService หรืออุปกรณ์ "เริ่มต้น"
การกำหนดค่า ImsService สำหรับฟังก์ชันการทำงาน MMTEL หรือ RCS
ImsService ยังอนุญาตฟีเจอร์ IMS ที่รองรับ (MMTEL และ RCS)
เปิดหรือปิดใช้แบบไดนามิกโดยใช้การอัปเดต
ImsService#onUpdateSupportedImsFeatures
วิธี ซึ่งจะทริกเกอร์เฟรมเวิร์ก
คำนวณใหม่ว่า ImsServices ใดมีผลผูกพันและฟีเจอร์ที่รองรับ หาก
แอป IMS จะอัปเดตเฟรมเวิร์กโดยไม่มีฟีเจอร์ที่รองรับ, ImsService
จะยกเลิกการเชื่อมต่อจนกว่าโทรศัพท์จะรีบูตหรือใส่ซิมการ์ดใหม่
ตรงกับแอป IMS
การเชื่อมโยงลำดับความสำคัญสำหรับ ImsService หลายรายการ
กรอบการทำงานไม่สามารถสนับสนุนการผูกมัดกับ ImsServices ทั้งหมดที่เป็นไปได้ทั้งหมดที่ โหลดไว้ล่วงหน้าในอุปกรณ์และจะผูกกับ ImsServices สูงสุด 2 รายการต่อช่องซิม (ImsService 1 รายการสำหรับแต่ละฟีเจอร์) ตามลำดับต่อไปนี้ตามฟีเจอร์
- ชื่อแพ็กเกจ ImsService ที่กำหนดโดยค่า CarrierConfig
config_ims_[mmtel/rcs]_package_override_string
เมื่อมีซิมการ์ด แทรกแล้ว - ชื่อแพ็กเกจ ImsService ที่กำหนดไว้ในค่าการวางซ้อนอุปกรณ์สำหรับ
config_ims_[mmtel/rcs]_package
รวมถึงกรณีที่ไม่มีซิม แทรกการ์ดแล้ว ImsService นี้ต้องรองรับฟีเจอร์ MmTel ฉุกเฉิน
คุณต้องมีชื่อแพ็กเกจของ ImsService อย่างใดอย่างหนึ่งที่ระบุใน CarrierConfig สำหรับผู้ให้บริการแต่ละรายที่จะใช้แพ็กเกจดังกล่าวหรือใน การวางซ้อนอุปกรณ์หาก ImsService ของคุณจะเป็นค่าเริ่มต้น ตามที่ให้คำจำกัดความไว้ข้างต้น
มาดูรายละเอียดของแต่ละฟีเจอร์กัน สำหรับอุปกรณ์ (ซิมเดียวหรือหลายซิม) เมื่อโหลดซิมการ์ดอันเดียวแล้ว จะสามารถใช้ฟีเจอร์ IMS 2 รายการ ได้แก่ MMTel และ RCS เฟรมเวิร์กจะพยายามเชื่อมโยงตามลำดับที่กำหนดไว้ข้างต้นสำหรับแต่ละฟีเจอร์และ หากฟีเจอร์ไม่พร้อมใช้งานสำหรับ ImsService ที่ระบุไว้ในผู้ให้บริการ การลบล้างการกำหนดค่า เฟรมเวิร์กจะใช้ ImsService เริ่มต้นของคุณแทน ตัวอย่างเช่น ตารางด้านล่างจะอธิบายฟีเจอร์ IMS ที่เฟรมเวิร์กจะ ใช้แอป IMS 3 แอปที่ใช้ ImsServices ที่ติดตั้งไว้ในระบบ พร้อมด้วยฟีเจอร์ดังต่อไปนี้
- ผู้ให้บริการ A ImsService รองรับ RCS
- Carrier B ImsService รองรับ RCS และ MMTel
- OEM ImsService รองรับ RCS และ MMTel
ใส่ซิมการ์ดแล้ว | ฟีเจอร์ RCS | ฟีเจอร์ MMTel |
---|---|---|
ผู้ให้บริการ A | ผู้ให้บริการ A | OEM |
ผู้ให้บริการ B | ผู้ให้บริการ B | ผู้ให้บริการ B |
ไม่มีซิม | OEM | OEM |
การตรวจสอบความถูกต้อง
ไม่ได้รวมเครื่องมือสำหรับการตรวจสอบการใช้งาน IMS มาตั้งแต่ IMS มีขนาดใหญ่มากและใช้อุปกรณ์ตรวจสอบแบบพิเศษ สามารถยืนยันได้เพียงว่าเฟรมเวิร์กโทรศัพท์ตอบสนองอย่างเหมาะสม ImsService API
พัฒนาแอป IMS
เมื่อพัฒนาแอป IMS ที่เชื่อมต่อกับสแต็กโทรศัพท์ Android เราขอแนะนำให้ระบุว่าแอปสามารถฟังหรือแก้ไขสถานะของ อินสแตนซ์ ImsService ที่แนบอยู่สำหรับการสมัครใช้บริการของผู้ให้บริการที่เฉพาะเจาะจง
หากต้องการฟังหรือแก้ไขสถานะของ ImsService สำหรับฟีเจอร์ MMTEL และ RCS ให้ใช้
เวลา
ImsManager
เพื่อรับอินสแตนซ์ของ
ImsMmTelManager
ImsRcsManager
หรือ IMS โดยเฉพาะ
ProvisioningManager
จากนั้นแอปจะฟังบริการและสถานะการจัดสรรเฉพาะ IMS ได้
เช่น
- ฟีเจอร์ MMTEL หรือ RCS ที่เปิดใช้และพร้อมใช้งาน
- ข้อมูลอัปเดตเมื่อสถานะการลงทะเบียน IMS เปลี่ยนแปลง
- สถานะการจัดสรรของฟีเจอร์ IMS
- ฟีเจอร์ IMS ที่ผู้ใช้เปิดใช้
ใช้ ImsStateCallback
แม้ว่า ImsService จะเป็นบริการที่มีผลผูกพันอย่างถาวร แต่บริการที่ ขอบเขตอาจเปลี่ยนแปลงเมื่อซิมการ์ดใหม่หรือสมัครใช้บริการแบบฝัง หรือเมื่อการกำหนดค่าของผู้ให้บริการมีการเปลี่ยนแปลง เนื่องจาก ImsService ไม่ได้เป็นส่วนหนึ่งของ กระบวนการเกี่ยวกับโทรศัพท์ แอปอาจประสบกับข้อยกเว้นที่ไม่คาดคิดเมื่อพยายาม เพื่อเข้าถึง API ของ IMS หาก ImsService เกิดข้อขัดข้องหรือไม่มีการเชื่อมโยงเนื่องจาก การเปลี่ยนการสมัครใช้บริการหรือการกำหนดค่า
สำหรับอุปกรณ์ที่ใช้ Android 13 ขึ้นไป เพื่อตรวจสอบ
อินสแตนซ์ ImsService สำหรับการสมัครใช้บริการที่เชื่อมโยง
พร้อมใช้งานหรือไม่พร้อมใช้งาน แอปสามารถใช้
ImsStateCallback
เมื่อได้รับอินสแตนซ์ของ ImsMmTelManager
หรือ ImsRcsManager
เราจะ
แนะนำให้แอปลงทะเบียนสำหรับ Callback สถานะ IMS ก่อนโดยใช้
ImsMmTelManager#registerImsStateCallback
หรือ
ImsRcsManager#registerImsStateCallback
หากต้องการรับการอัปเดตเกี่ยวกับการติดต่อกลับสำหรับการสมัครใช้บริการที่เฉพาะเจาะจงต่อไปเมื่อ
ImsService พร้อมใช้งานอีกครั้ง แอปต้องยกเลิกการลงทะเบียนหรือยกเลิก
Callback ที่ลงทะเบียนผ่าน ImsMmTelManager
, ImsRcsManager
หรือ
ProvisioningManager
; และลงทะเบียน Callback ใหม่
หากมีการสมัครใช้บริการที่ไม่รองรับ IMS เฟรมเวิร์กจะเรียกว่า
ImsStateCallback#onUnavailable
พร้อมเหตุผล
REASON_NO_IMS_SERVICE_CONFIGURED
ซึ่งหมายความว่า ImsService และ API ที่เกี่ยวข้องกับ IMS จะไม่พร้อมใช้งานสำหรับ
การสมัครใช้บริการ
ในกรณีที่กระบวนการโทรศัพท์ขัดข้องซึ่งไม่เกิดขึ้นบ่อย แอปจะต้องได้รับ
ImsStateCallback#onError
และจะไม่ได้รับการอัปเดตเกี่ยวกับอินสแตนซ์ ImsStateCallback
ที่ลงทะเบียนไว้อีกต่อไป
หากต้องการกู้คืนจากเงื่อนไขนี้ ให้ลงทะเบียนอินสแตนซ์ ImsStateCallback
อีกครั้งสำหรับ
การสมัครใช้บริการที่เกี่ยวข้องโดยการโทร
ImsMmTelManager#registerImsStateCallback
หรือ
ImsRcsManager#registerImsStateCallback