Menerapkan IMS

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

Ikhtisar ImsService

Gambar 1. Ikhtisar ImsService

Dengan menggunakan antarmuka ImsService, pelaksana IMS dapat memberikan informasi pensinyalan penting ke platform, seperti informasi pendaftaran IMS, integrasi SMS melalui IMS, dan integrasi fitur MmTel untuk menyediakan panggilan suara dan video. ImsService API juga merupakan Android System API, yang berarti dapat dibangun terhadap Android SDK secara langsung, bukan terhadap sumbernya. Aplikasi IMS yang telah diinstal sebelumnya pada perangkat juga dapat dikonfigurasi agar Play Store dapat diperbarui.

Contoh dan sumber

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

Anda dapat menemukan dokumentasi untuk ImsService API di ImsService dan di kelas lain di API.

Penerapan

API ImsService adalah API tingkat tinggi yang memungkinkan Anda mengimplementasikan IMS dalam banyak cara, tergantung pada perangkat keras yang tersedia. Misalnya, implementasi berubah tergantung pada apakah implementasi IMS sepenuhnya pada prosesor aplikasi atau jika sebagian atau seluruhnya diturunkan ke modem. Android tidak menyediakan HAL publik untuk pembongkaran ke prosesor pita dasar, jadi pembongkaran apa pun harus dilakukan menggunakan ekstensi HAL Anda ke modem.

Kompatibilitas dengan implementasi IMS yang lebih lama

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

  • Ubah namespace implementasi ImsService untuk memperluas dari API namespace android.telephony.ims.compat .
  • Ubah definisi layanan ImsService di AndroidManifest.xml untuk menggunakan tindakan filter maksud android.telephony.ims.compat.ImsService , alih-alih tindakan android.telephony.ims.ImsService .

Kerangka kerja kemudian akan mengikat ke ImsService menggunakan lapisan kompatibilitas yang disediakan di Android 9 untuk bekerja dengan implementasi ImsService lama.

Pendaftaran ImsService dengan kerangka kerja

API ImsService diimplementasikan sebagai layanan, yang diikat oleh kerangka kerja Android untuk berkomunikasi dengan implementasi IMS. Tiga langkah diperlukan untuk mendaftarkan aplikasi yang mengimplementasikan ImsService dengan kerangka kerja. Pertama, implementasi ImsService harus mendaftarkan dirinya ke platform menggunakan AndroidManifest.xml dari aplikasi; kedua, itu harus menentukan fitur IMS mana yang didukung implementasi (MmTel atau RCS); dan ketiga, harus diverifikasi sebagai implementasi IMS tepercaya baik dalam konfigurasi operator 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 mendefinisikan atribut berikut, yang diperlukan untuk operasi yang benar:

  • directBootAware="true" : Memungkinkan layanan ditemukan dan dijalankan melalui telephony sebelum pengguna membuka kunci perangkat. Layanan tidak dapat mengakses penyimpanan terenkripsi perangkat sebelum pengguna membuka kunci perangkat. Untuk informasi selengkapnya, lihat Mendukung mode Boot Langsung dan Enkripsi Berbasis File .
  • persistent="true" : Memungkinkan layanan ini dijalankan 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 memiliki izin BIND_IMS_SERVICE yang diberikan padanya yang dapat mengikat ke aplikasi. Ini mencegah aplikasi jahat mengikat ke layanan, karena hanya aplikasi sistem yang dapat diberikan izin oleh kerangka kerja.

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

Spesifikasi fitur IMS

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

Di bawah ini adalah fitur valid yang didefinisikan dalam android.telephony.ims.ImsFeature yang dapat diberikan oleh ImsService dan penjelasan serta contoh mengapa aplikasi IMS ingin mengimplementasikan satu atau semua fitur ini. Setelah setiap fitur ditentukan, halaman ini menjelaskan bagaimana ImsService mendeklarasikan kumpulan fitur yang ditentukan untuk setiap slot SIM.

FEATURE_MMTEL

ImsService mengimplementasikan fitur IMS MMTEL, yang berisi dukungan untuk semua media IMS (spesifikasi IR.92 dan IR.94) kecuali lampiran darurat ke PDN IMS untuk panggilan darurat. Implementasi ImsService apa pun yang ingin mendukung fitur MMTEL harus memperluas kelas dasar android.telephony.ims.MmTelFeature dan mengembalikan implementasi MmTelFeature kustom di ImsService#createMmTelFeature .

FEATURE_EMERGENCY_MMTEL

Mendeklarasikan fitur ini hanya memberi sinyal ke platform bahwa pemasangan darurat ke IMS PDN untuk layanan darurat dimungkinkan. Jika fitur ini tidak dideklarasikan untuk ImsService Anda, platform akan selalu default ke Circuit Switch Fallback untuk layanan darurat. Fitur FEATURE_MMTEL harus ditentukan agar fitur ini dapat ditentukan.

FEATURE_RCS

API ImsService tidak mengimplementasikan fitur IMS RCS apa pun, tetapi kelas dasar android.telephony.ims.RcsFeature masih dapat berguna. Kerangka kerja secara otomatis mengikat ke ImsService dan memanggil ImsService#createRcsFeature ketika mendeteksi bahwa paket harus menyediakan RCS. Jika kartu SIM yang terkait dengan layanan RCS dihapus, kerangka kerja secara otomatis memanggil RcsFeature#onFeatureRemoved dan kemudian membersihkan ImsService yang terkait dengan fitur RCS. Fungsionalitas ini dapat menghapus beberapa logika deteksi/pengikatan khusus yang seharusnya disediakan oleh fitur RCS.

Pendaftaran fitur yang didukung

Kerangka telepon pertama-tama mengikat ke ImsService untuk menanyakan fitur yang didukungnya menggunakan API ImsService#querySupportedImsFeatures . Setelah kerangka menghitung fitur mana yang akan didukung oleh ImsService, ia akan memanggil ImsService#create[...]Feature untuk setiap fitur yang akan menjadi tanggung jawab ImsService. Jika fitur yang didukung aplikasi IMS berubah, Anda dapat menggunakan ImsService#onUpdateSupportedImsFeatures untuk memberi sinyal kerangka kerja untuk menghitung ulang fitur yang didukung. Lihat diagram di bawah untuk informasi lebih lanjut tentang inisialisasi dan pengikatan ImsService.

Inisialisasi dan pengikatan ImsService

Gambar 2: Inisialisasi dan pengikatan ImsService

Deteksi kerangka kerja dan verifikasi Implementasi ImsService

Setelah ImsService didefinisikan dengan benar di AndroidManifest.xml, platform harus dikonfigurasi untuk (dengan aman) mengikat ke ImsService bila perlu. Ada dua jenis ImsServices yang diikat oleh kerangka kerja:

  1. Carrier "override" ImsService: ImsServices ini sudah dimuat sebelumnya ke perangkat tetapi terpasang ke satu atau lebih operator seluler dan hanya akan terikat ketika kartu SIM yang cocok dimasukkan. Ini dikonfigurasi menggunakan
  2. Perangkat "default" ImsService: Ini adalah ImsService default yang dimuat ke perangkat oleh OEM dan harus dirancang untuk menyediakan layanan IMS dalam semua situasi ketika operator ImsService tidak tersedia dan berguna dalam situasi di mana perangkat tidak memiliki kartu SIM dimasukkan atau kartu SIM yang dimasukkan tidak memiliki operator ImsService yang terpasang dengannya. Ini didefinisikan dalam overlay perangkat menggunakan konfigurasi berikut:

Android tidak mendukung aplikasi dengan implementasi ImsService yang dapat diunduh pihak ketiga, jadi setiap implementasi ImsService yang didefinisikan di sini harus berupa aplikasi Sistem dan harus berada di folder /system/priv-app/ atau /product/priv-app/ untuk memberikan yang sesuai izin (yaitu izin telepon, mikrofon, lokasi, kamera, dan kontak). Dengan memverifikasi apakah nama paket implementasi IMS cocok dengan CarrierConfig atau nilai overlay perangkat yang ditentukan di atas, hanya aplikasi pra-instal tepercaya yang terikat.

Kustomisasi

Aplikasi yang mengimplementasikan ImsService hanya terikat pada perangkat yang dikonfigurasi sebagai operator "mengganti" ImsService atau perangkat "default" konfigurasi ImsService untuk fungsionalitas MMTEL atau RCS. ImsService juga memungkinkan fitur IMS yang didukungnya (MMTEL dan RCS) untuk diaktifkan atau dinonaktifkan secara dinamis melalui pembaruan menggunakan metode ImsService#onUpdateSupportedImsFeatures . Ini memicu kerangka kerja untuk menghitung ulang ImsServices mana yang terikat dan fitur mana yang mereka dukung. Jika aplikasi IMS memperbarui kerangka kerja tanpa fitur yang didukung, IMSService tidak akan terikat hingga ponsel di-boot ulang atau kartu SIM baru dimasukkan yang cocok dengan aplikasi IMS.

Prioritas pengikatan 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) dalam urutan berikut berdasarkan per fitur:

  1. Nama paket ImsService ditentukan oleh nilai CarrierConfig config_ims_[mmtel/rcs]_package_override_string ketika ada kartu SIM yang dimasukkan.
  2. Nama paket ImsService yang ditentukan dalam nilai overlay perangkat untuk config_ims_[mmtel/rcs]_package termasuk kasus di mana tidak ada kartu SIM yang dimasukkan. ImsService ini HARUS mendukung fitur Emergency MmTel.

Anda harus memiliki nama paket ImsService Anda yang ditentukan di CarrierConfig untuk setiap operator yang akan menggunakan paket itu atau di overlay perangkat jika ImsService Anda akan menjadi default, seperti yang didefinisikan di atas.

Mari kita uraikan ini untuk setiap fitur. Untuk perangkat (tunggal atau multi-SIM) dengan satu kartu SIM dimuat, dua fitur IMS dimungkinkan: MMTel dan RCS. Kerangka kerja akan mencoba untuk mengikat dalam urutan yang ditentukan di atas untuk setiap fitur dan jika fitur tidak tersedia untuk ImsService yang ditentukan dalam penggantian Konfigurasi Operator, kerangka kerja akan mundur ke ImsService default Anda. Jadi, misalnya, tabel di bawah ini menjelaskan fitur IMS mana yang akan digunakan kerangka kerja mengingat tiga aplikasi IMS yang mengimplementasikan IMSServices yang diinstal pada sistem dengan fitur berikut:

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

Validasi

Alat untuk memverifikasi implementasi IMS itu sendiri tidak disertakan karena spesifikasi IMS sangat besar dan menggunakan peralatan verifikasi khusus. Pengujian hanya dapat memverifikasi bahwa kerangka kerja telepon merespons dengan benar ke ImsService API.