ใช้ IMS

Android 9 เปิดตัวอินเทอร์เฟซ SystemApi ใหม่ชื่อ ImsService เพื่อช่วยในการใช้งานระบบย่อยของ IP Multimedia (IMS) ImsService API คือ อินเทอร์เฟซที่กำหนดไว้อย่างดีระหว่างแพลตฟอร์ม Android และผู้ให้บริการ หรือ การใช้ IMS ของผู้ให้บริการขนส่ง

ภาพรวมของ ImsService

รูปที่ 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

การเริ่มและการเชื่อมโยง ImsService

รูปที่ 2: การเริ่มต้นและการเชื่อมโยง ImsService

การตรวจหาและการยืนยันการติดตั้งใช้งาน ImsService

เมื่อกำหนด ImsService ไว้อย่างถูกต้องใน AndroidManifest.xml แล้ว ต้องได้รับการกำหนดค่าให้เชื่อมโยงกับ ImsService (ปลอดภัย) เมื่อ เหมาะสม ImsServices ที่มี 2 ประเภทที่กรอบจะผูกมัดด้วย ได้แก่

  1. "ลบล้าง" ผู้ให้บริการ ImsService: บริการ ImsServices เหล่านี้จะถูกโหลดล่วงหน้าไว้ใน แต่ติดอยู่กับผู้ให้บริการเครือข่ายมือถืออย่างน้อย 1 รายและจะ เชื่อมโยงเมื่อใส่ซิมการ์ดที่ตรงกัน ซึ่งกำหนดค่าโดยใช้
  2. อุปกรณ์ "เริ่มต้น" ImsService: นี่คือ ImsService เริ่มต้นที่โหลด ติดมากับอุปกรณ์โดย OEM และควรออกแบบมาเพื่อให้บริการ IMS ใน ทุกกรณีที่ผู้ให้บริการ ImsService ไม่พร้อมให้บริการและมีประโยชน์ สถานการณ์ที่อุปกรณ์ไม่ได้ใส่ซิมการ์ดหรือใส่ซิมการ์ด ไม่ได้ติดตั้งผู้ให้บริการ ImsService ไว้ นี่คือ ที่กำหนดไว้ในการวางซ้อนอุปกรณ์โดยใช้การกำหนดค่าต่อไปนี้

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 รายการสำหรับแต่ละฟีเจอร์) ตามลำดับต่อไปนี้ตามฟีเจอร์

  1. ชื่อแพ็กเกจ ImsService ที่กำหนดโดยค่า CarrierConfig config_ims_[mmtel/rcs]_package_override_string เมื่อมีซิมการ์ด แทรกแล้ว
  2. ชื่อแพ็กเกจ 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