Mengimplementasikan IMS

Android 9 memperkenalkan antarmuka SystemApi baru yang disebut ImsService untuk membantu Anda mengimplementasikan IP Multimedia Subsystem (IMS). ImsService API adalah antarmuka yang jelas antara platform Android dan vendor atau implementasi IMS yang disediakan operator.

Ringkasan ImsService

Gambar 1. Ringkasan ImsService

Dengan menggunakan antarmuka ImsService, implementasi IMS dapat memberikan informasi sinyal ke platform, seperti informasi pendaftaran IMS, SMS melalui integrasi IMS, dan integrasi fitur MmTel untuk memberikan layanan suara dan video untuk menelepon. ImsService API juga merupakan Android System API, yang berarti dibuat berdasarkan Android SDK secara langsung, bukan terhadap sumber. IMS yang telah diinstal lebih dulu pada perangkat juga dapat dikonfigurasi untuk Play Store dapat diperbarui.

Contoh dan sumber

Android menyediakan aplikasi pada AOSP yang mengimplementasikan sebagian ImsService API untuk tujuan pengujian dan pengembangan. Anda dapat menemukan aplikasi di /testapps/ImsTestService.

Anda dapat menemukan dokumentasi untuk ImsService API di ImsService dan di class lain dalam API.

Implementasi

ImsService API adalah API tingkat tinggi yang memungkinkan Anda mengimplementasikan IMS dengan banyak cara, tergantung pada perangkat keras yang tersedia. Misalnya, perubahan implementasi tergantung pada apakah implementasi IMS sepenuhnya pada aplikasi prosesor atau jika muatannya dialihkan sebagian atau seluruhnya ke modem. Android melakukan tidak menyediakan HAL publik untuk penurunan beban ke prosesor {i>baseband<i}, jadi penghapusan muatan harus dilakukan menggunakan ekstensi HAL Anda ke modem.

Kompatibilitas dengan implementasi IMS lama

Meskipun Android 9 menyertakan ImsService API, perangkat yang menggunakan implementasi lama untuk IMS tidak dapat mendukung API. Untuk perangkat ini, class wrapper dan antarmuka AIDL lama telah dipindahkan ke namespace android.telephony.ims.compat. Saat mengupgrade ke Android 9, perangkat yang lebih lama harus melakukan hal berikut untuk melanjutkan dukungan API lama.

  • Ubah namespace implementasi ImsService untuk memperluasnya dari API namespace android.telephony.ims.compat.
  • Ubah definisi layanan ImsService di AndroidManifest.xml untuk menggunakan android.telephony.ims.compat.ImsService tindakan filter intent, bukan tindakan android.telephony.ims.ImsService.

Framework ini kemudian akan mengikat ke ImsService menggunakan lapisan kompatibilitas yang disediakan di Android 9 agar berfungsi dengan Implementasi ImsService.

Pendaftaran ImsService dengan framework

ImsService API diimplementasikan sebagai layanan, yang oleh kerangka kerja Android terikat untuk berkomunikasi dengan implementasi IMS. Tiga langkah diperlukan untuk mendaftarkan aplikasi yang mengimplementasikan ImsService dengan Google Workspace for Education. Pertama, implementasi ImsService harus mendaftarkan dirinya sendiri platform menggunakan AndroidManifest.xml aplikasi; kedua, harus menentukan fitur IMS mana yang didukung implementasi (MmTel atau RCS); dan ketiga, harus diverifikasi sebagai implementasi IMS terpercaya, baik di dalam konfigurasi deployment, atau overlay perangkat.

Definisi layanan

Aplikasi IMS mendaftarkan ImsService dengan kerangka kerja dengan menambahkan Entri service ke dalam manifes menggunakan format berikut:

<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>

Definisi service di AndroidManifest.xml menentukan hal berikut yang diperlukan agar operasi berjalan benar:

  • directBootAware="true": Mengizinkan layanan ditemukan dan dijalankan oleh telephony sebelum pengguna membuka kunci perangkat. Layanan tidak dapat mengakses yang dienkripsi dengan perangkat sebelum pengguna membuka kunci perangkat. Untuk selengkapnya informasi, lihat Mendukung mode Direct Boot dan Enkripsi Berbasis File.
  • persistent="true": Mengizinkan layanan ini berjalan terus-menerus dan tidak dimatikan oleh sistem untuk mendapatkan kembali memori. Atribut ini HANYA berfungsi jika aplikasi dibangun sebagai aplikasi sistem.
  • permission="android.permission.BIND_IMS_SERVICE": Memastikan bahwa hanya proses yang telah diberi izin BIND_IMS_SERVICE dapat terikat ke aplikasi. Hal ini mencegah aplikasi penipu mengikat ke , karena hanya aplikasi sistem yang dapat diberikan izin oleh Google Workspace for Education.

Layanan juga harus menentukan elemen intent-filter dengan tindakan tersebut android.telephony.ims.ImsService. Hal ini memungkinkan kerangka kerja untuk menemukan ImsService.

Spesifikasi fitur IMS

Setelah ImsService didefinisikan sebagai layanan Android di AndroidManifest.xml, ImsService harus menentukan fitur IMS yang didukungnya. Android saat ini mendukung fitur MmTel dan RCS, namun hanya MmTel yang yang terintegrasi ke dalam kerangka kerja. Meskipun tidak ada RCS API yang terintegrasi dalam kerangka kerja, masih ada keuntungan untuk menyatakannya sebagai fitur dari seperti ImsService.

Berikut adalah fitur valid yang ditentukan di android.telephony.ims.ImsFeature yang yang dapat diberikan oleh ImsService, serta penjelasan dan contoh tentang mengapa aplikasi mana saja yang ingin mengimplementasikan salah satu atau semua fitur ini. Setelah setiap ditentukan, halaman ini menguraikan cara ImsService mendeklarasikan kumpulan fitur yang didefinisikannya untuk setiap slot SIM.

FITUR_MMTEL

ImsService menerapkan fitur IMS MMTEL, yang berisi dukungan untuk semua media IMS (spesifikasi IR.92 dan IR.94) kecuali IMS PDN untuk panggilan darurat. Setiap penerapan ImsService yang ingin mendukung fitur MMTEL agar dapat Class dasar android.telephony.ims.MmTelFeature dan tampilkan class kustom Implementasi MmTelFeature di ImsService#createMmTelFeature.

FITUR_DARURAT_MMTEL

Mendeklarasikan fitur ini hanya memberi sinyal ke platform bahwa keadaan darurat terhubung ke IMS PDN untuk layanan darurat dimungkinkan. Jika fitur ini tidak dideklarasikan untuk ImsService Anda, platform akan selalu ditetapkan secara default ke Penggantian Circuit Switch untuk layanan darurat. Fitur FEATURE_MMTEL harus ditentukan untuk ini fitur ditentukan.

FITUR_RCS

ImsService API tidak mengimplementasikan fitur RCS IMS apa pun, tetapi Class dasar android.telephony.ims.RcsFeature masih dapat berguna. Kerangka kerja otomatis mengikat ke ImsService dan memanggil ImsService#createRcsFeature ketika mendeteksi bahwa paket harus menyediakan RCS. Jika kartu SIM yang dikaitkan setelah layanan RCS dihapus, framework akan otomatis memanggil RcsFeature#onFeatureRemoved, lalu menghapus ImsService yang terkait dengan fitur RCS. Fungsi ini dapat menghapus beberapa deteksi atau logika pengikatan yang seharusnya disediakan oleh fitur RCS.

Pendaftaran fitur yang didukung

Framework telepon pertama kali terikat ke ImsService untuk mengkueri fitur yang yang didukungnya menggunakan ImsService#querySupportedImsFeatures API. Setelah menghitung fitur mana yang akan didukung oleh ImsService, ia akan memanggil ImsService#create[...]Feature untuk setiap fitur yang akan dijadikan bertanggung jawab. Jika fitur yang didukung aplikasi IMS berubah, Anda akan dapat menggunakan ImsService#onUpdateSupportedImsFeatures untuk memberi sinyal ke framework untuk menghitung ulang fitur yang didukung. Lihat diagram berikut untuk mengetahui informasi selengkapnya pada inisialisasi dan pengikatan ImsService.

ImsService melakukan inisialisasi dan mengikat

Gambar 2: Inisialisasi dan binding ImsService

Deteksi dan verifikasi framework dari implementasi ImsService

Setelah ImsService didefinisikan dengan benar di AndroidManifest.xml, harus dikonfigurasi (dengan aman) untuk mengikat ke ImsService ketika yang sesuai. Ada dua jenis ImsServices yang diikat oleh framework:

  1. "Penggantian" operator ImsService: ImsServices ini dipramuat ke perangkat tertentu tetapi terpasang pada satu atau lebih operator seluler dan hanya akan terikat bila kartu SIM yang sesuai dimasukkan. Fitur ini dikonfigurasi menggunakan
  2. "Default" perangkat ImsService: Ini adalah ImsService {i>default<i} yang dimuat ke perangkat oleh OEM dan harus dirancang untuk menyediakan layanan IMS di semua situasi saat ImsService operator tidak tersedia dan berguna dalam situasi ketika perangkat tidak memasukkan kartu SIM atau kartu SIM yang dimasukkan tidak memiliki ImsService operator yang terinstal. Ini adalah yang ditentukan di overlay perangkat menggunakan konfigurasi berikut:

Android tidak mendukung aplikasi dengan ImsService yang dapat didownload pihak ketiga sehingga implementasi ImsService yang ditentukan di sini harus berupa aplikasi Sistem dan harus berada di /system/priv-app/ atau /product/priv-app/ untuk memberikan izin akses yang sesuai (yaitu ponsel, izin mikrofon, lokasi, kamera, dan kontak). Dengan memverifikasi apakah nama paket implementasi IMS cocok dengan CarrierConfig atau nilai overlay yang ditentukan di atas, hanya aplikasi tepercaya yang diinstal sebelumnya terikat.

Penyesuaian

Aplikasi yang menerapkan ImsService hanya terikat pada perangkat tempat aplikasi itu dikonfigurasi sebagai “timpa” ImsService atau perangkat "default" Konfigurasi ImsService untuk fungsi MMTEL atau RCS. ImsService juga memungkinkan fitur IMS yang didukungnya (MMTEL dan RCS) untuk diaktifkan atau dinonaktifkan secara dinamis menggunakan pembaruan menggunakan Metode ImsService#onUpdateSupportedImsFeatures. Tindakan ini akan memicu framework untuk menghitung ulang ImsServices mana yang terikat dan fitur mana yang mereka dukung. Jika Aplikasi IMS memperbarui kerangka kerja tanpa ada fitur yang didukung, layanan ImsService akan dilepas hingga ponsel dimulai ulang atau kartu SIM baru dimasukkan cocok dengan aplikasi IMS.

Mengikat prioritas untuk beberapa ImsService

Kerangka kerja tidak dapat mendukung pengikatan ke semua kemungkinan ImsServices yang dimuat sebelumnya ke perangkat dan akan mengikat hingga dua ImsServices per slot SIM (satu ImsService untuk setiap fitur) dengan urutan berikut per fitur:

  1. Nama paket ImsService yang ditentukan oleh nilai CarrierConfig config_ims_[mmtel/rcs]_package_override_string saat ada kartu SIM disisipkan.
  2. Nama paket ImsService yang ditentukan dalam nilai overlay perangkat untuk config_ims_[mmtel/rcs]_packagetermasuk kasus jika tidak ada SIM kartu disisipkan. ImsService ini HARUS mendukung fitur MmTel Darurat.

Anda harus memiliki nama paket ImsService yang ditentukan di CarrierConfig untuk setiap ekspedisi yang akan menggunakan paket itu atau dalam perangkat jika ImsService akan menjadi {i>default<i}, seperti yang didefinisikan di atas.

Mari kita uraikan untuk setiap fitur. Untuk perangkat (tunggal atau multi-SIM) dengan memuat satu kartu SIM, dapat terdapat dua fitur IMS: MMTel dan RCS. Kerangka kerja akan mencoba mengikat dalam urutan yang ditentukan di atas untuk setiap fitur dan jika fitur tidak tersedia untuk ImsService yang ditentukan dalam Operator Penggantian konfigurasi, framework akan kembali ke ImsService default Anda. Jadi, misalnya, tabel di bawah ini menjelaskan fitur IMS mana yang akan menggunakan tiga aplikasi IMS yang menerapkan ImsServices yang diinstal pada sistem, dengan fitur berikut:

  • Operator A ImsService mendukung RCS
  • ImsService Operator B mendukung RCS dan MMTel
  • ImsService OEM mendukung RCS dan MMTel
Kartu SIM Disisipkan Fitur RCS Fitur MMTel
Operator A Operator A OEM
Operator B Operator B Operator B
Tidak ada SIM OEM OEM

Validasi

Alat untuk memverifikasi implementasi IMS itu sendiri tidak disertakan karena IMS spesifikasinya sangat besar dan menggunakan peralatan verifikasi khusus. Tujuan hanya dapat memverifikasi bahwa framework telepon merespons atau ImsService API.

Mengembangkan aplikasi IMS

Saat mengembangkan aplikasi IMS yang berinteraksi dengan tumpukan telepon Android, sebaiknya Anda menetapkan agar aplikasi dapat memantau atau mengubah status Instance ImsService yang dilampirkan untuk langganan operator tertentu.

Untuk memproses atau mengubah status ImsService untuk fitur MMTEL dan RCS, gunakan tindakan ImsManager untuk mendapatkan instance ImsMmTelManager, ImsRcsManager, atau spesifik per IMS ProvisioningManager . Aplikasi kemudian dapat memproses layanan khusus IMS dan status penyediaan seperti:

  • Fitur MMTEL atau RCS yang diaktifkan dan tersedia
  • Pembaruan saat status pendaftaran IMS berubah
  • Status penyediaan fitur IMS
  • Fitur IMS yang telah diaktifkan pengguna

Menggunakan ImsStateCallback

Meskipun ImsService adalah layanan yang terikat secara persisten, layanan yang terikat mungkin berubah saat kartu SIM baru atau langganan tersemat menjadi aktif atau saat konfigurasi operator berubah. Karena ImsService bukan bagian dari telepon, aplikasi mungkin mengalami pengecualian yang tak terduga saat mencoba untuk mengakses IMS API jika ImsService secara tak terlihat mengalami error atau tidak terikat karena langganan atau perubahan konfigurasi.

Di perangkat yang menjalankan Android 13 atau yang lebih baru, untuk dipantau apakah instance ImsService untuk langganan terkait tersedia atau tidak tersedia, aplikasi dapat menggunakan ImsStateCallback . Saat mendapatkan instance ImsMmTelManager atau ImsRcsManager, kita merekomendasikan agar aplikasi terlebih dahulu mendaftar untuk callback status IMS menggunakan ImsMmTelManager#registerImsStateCallback atau ImsRcsManager#registerImsStateCallback Agar dapat terus menerima pembaruan callback untuk langganan tertentu saat ImsService tersedia lagi, aplikasi harus membatalkan pendaftaran atau menghapus callback yang didaftarkan melalui ImsMmTelManager, ImsRcsManager, atau ProvisioningManager; dan mendaftarkan callback baru.

Jika ada langganan yang tidak mendukung IMS, framework akan memanggil ImsStateCallback#onUnavailable dengan alasan REASON_NO_IMS_SERVICE_CONFIGURED. Ini berarti bahwa ImsService dan API terkait IMS tidak tersedia untuk langganan Anda.

Dalam peristiwa yang jarang terjadi ketika proses telepon error, aplikasi akan menerima ImsStateCallback#onError dan tidak lagi menerima update pada instance ImsStateCallback yang terdaftar. Untuk memulihkan dari kondisi ini, daftarkan ulang instance ImsStateCallback untuk langganan terkait dengan memanggil ImsMmTelManager#registerImsStateCallback atau ImsRcsManager#registerImsStateCallback.