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.
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 tindakanandroid.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 olehtelephony
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 izinBIND_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.
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:
- "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
config_ims_mmtel_package_override_string
Kunci CarrierConfig untuk ImsServices yang menerapkan fitur MMTEL.config_ims_rcs_package_override_string
untuk ImsServices yang menerapkan fitur RCS.
- "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:
config_ims_mmtel_package
: Menerapkan fitur MMTELconfig_ims_rcs_package
: Mengimplementasikan fitur RCS
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:
- Nama paket ImsService yang ditentukan oleh nilai CarrierConfig
config_ims_[mmtel/rcs]_package_override_string
saat ada kartu SIM disisipkan. - Nama paket ImsService yang ditentukan dalam nilai overlay perangkat untuk
config_ims_[mmtel/rcs]_package
termasuk 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
.