Android 9 introduce una nuova interfaccia SystemApi chiamata Servizio IAM che facilita l'implementazione del sottosistema IP multimediale (IMS). L'API ImsService è un servizio un'interfaccia ben definita tra la piattaforma Android e un fornitore dell'IMS fornita dall'operatore.
Figura 1. Panoramica di ImsService
Utilizzando l'interfaccia ImsService, l'implementatore IMS può fornire importanti di segnalazione alla piattaforma, come i dati di registrazione IMS, gli SMS tramite l'integrazione IMS e MmTel per fornire funzionalità vocali e video chiamata. L'API ImsService è anch'essa un'API di sistema Android, il che significa che può essere basate direttamente sull'SDK Android anziché sull'origine. Un sistema IMS preinstallata sul dispositivo possono essere configurate anche per: aggiornabili nel Play Store.
Esempi e fonte
Android mette a disposizione un'app su AOSP che implementa parti dell'API l'API ImsService a scopo di test e sviluppo. Puoi trovare all'indirizzo /testapps/ImsTestService.
Puoi trovare la documentazione dell'API ImsService in Servizio IAM e nelle altre classi nell'API.
Implementazione
L'API ImsService è un'API di alto livello che consente di implementare IMS in molti modi, a seconda dell'hardware disponibile. Ad esempio, l'implementazione cambia a seconda che l'implementazione di IMS sia o meno completa o se è stato scaricato parzialmente o completamente nel modem. Android non fornire un HAL pubblico per l'offloading al processore della banda base, quindi qualsiasi l'offload deve avvenire usando l'estensione HAL al modem.
Compatibilità con le precedenti implementazioni di IMS
Sebbene Android 9 includa l'API ImsService,
I dispositivi che utilizzano un'implementazione precedente per IMS non sono in grado di supportare l'API.
Per questi dispositivi, le interfacce e le classi wrapper precedenti AIDL sono state spostate
allo spazio dei nomi android.telephony.ims.compat
. In caso di upgrade ad Android
9, per continuare è necessario eseguire le operazioni seguenti:
il supporto dell'API precedente.
- Modifica lo spazio dei nomi dell'implementazione di ImsService per estenderlo dal
API dello spazio dei nomi
android.telephony.ims.compat
. - Modifica la definizione del servizio ImsService in AndroidManifest.xml per utilizzare il comando
android.telephony.ims.compat.ImsService
azione di filtro per intent, anziché l'azioneandroid.telephony.ims.ImsService
.
Il framework verrà quindi associato a ImsService utilizzando il livello di compatibilità
forniti in Android 9 per funzionare con la versione
Implementazione di ImsService
.
Registrazione a ImsService con il framework
L'API ImsService è implementata come servizio, ovvero il framework di Android
si associa per comunicare con l'implementazione di IMS. Tre passaggi sono
necessari per registrare un'app che implementa un ImsService con
il modello di machine learning. Innanzitutto, l'implementazione di ImsService deve registrarsi con il
piattaforma che utilizza il AndroidManifest.xml
dell'app; in secondo luogo,
definire le funzionalità di IMS supportate dall'implementazione (MmTel o RCS); e infine
deve essere verificato come implementazione IMS attendibile nell'operatore
configurazione o overlay del dispositivo.
Definizione del servizio
L'app IMS registra un ImsService con il framework aggiungendo un'istanza
Voce service
nel manifest utilizzando il seguente formato:
<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>
La definizione di service
in AndroidManifest.xml
definisce quanto segue
necessari per un corretto funzionamento:
directBootAware="true"
: consente al servizio di essere rilevato ed eseguito datelephony
prima che l'utente sblocchi il dispositivo. Il servizio non può accedere con crittografia del dispositivo prima che l'utente sblocchi il dispositivo. Per ulteriori informazioni le informazioni, vedi Supporta la modalità di avvio diretto e Crittografia basata su file.persistent="true"
: consente l'esecuzione permanente di questo servizio senza che venga terminati dal sistema per recuperare memoria. Questo attributo funziona SOLO se è un'app di sistema.permission="android.permission.BIND_IMS_SERVICE"
: garantisce che solo un a cui è stata concessa l'autorizzazioneBIND_IMS_SERVICE
può eseguire l'associazione all'app. In questo modo un'app non autorizzata non si associa poiché solo le app di sistema possono ricevere l'autorizzazione il modello di machine learning.
Il servizio deve inoltre specificare l'elemento intent-filter
con l'azione
android.telephony.ims.ImsService
. Ciò permette al framework di trovare
ImsService
.
Specifiche delle funzionalità IMS
Dopo che ImsService è stato definito come servizio Android in AndroidManifest.xml, ImsService deve definire le funzionalità di IMS che supporta. Attualmente Android supporta le funzionalità MmTel e RCS, ma solo MmTel è integrati nel framework. Sebbene non esistano API RCS integrate il framework, ci sono ancora vantaggi nel dichiararlo come caratteristica del ImsService.
Di seguito sono riportate le funzionalità valide definite in android.telephony.ims.ImsFeature
che
un ImsService può fornire una spiegazione ed esempio del motivo per cui un sistema IMS
apprezzerebbero l'implementazione
di una o di tutte queste funzionalità. Dopo ogni
è definita, questa pagina descrive in che modo ImsService
dichiara l'insieme
che ha definito per ogni slot della SIM.
FEATURE_MMTEL
ImsService
implementa la funzionalità IMS MMTEL, che include il supporto per
tutti i supporti IMS (specifiche IR.92 e IR.94) tranne il collegamento di emergenza
PDN IMS per le chiamate di emergenza. Qualsiasi implementazione di ImsService
che voglia
le funzionalità MMTEL dovrebbero estendere
android.telephony.ims.MmTelFeature
per la classe base e restituisce una
Implementazione di MmTelFeature
in
ImsService#createMmTelFeature
.
FEATURE_EMERGENCY_MMTEL
Dichiarare questa funzionalità segnala solo alla piattaforma che l'emergenza si collega
Il PDN IMS per i servizi di emergenza è possibile. Se questa funzionalità non viene dichiarata per
il tuo ImsService
, la piattaforma utilizzerà sempre l'opzione di riserva per interruttore del circuito per impostazione predefinita
per i servizi di emergenza. A questo scopo è necessario definire la caratteristica FEATURE_MMTEL
caratteristica da definire.
FEATURE_RCS
L'API ImsService non implementa alcuna funzionalità RCS di IMS, ma le
android.telephony.ims.RcsFeature
classe base può comunque essere utile. Il framework
si associa automaticamente a ImsService e chiama ImsService#createRcsFeature
quando rileva che il pacchetto deve fornire RCS. Se la scheda SIM associata
con il servizio RCS viene rimosso, il framework chiama automaticamente
RcsFeature#onFeatureRemoved
, quindi pulisce i ImsService
associati
con la funzionalità RCS. Questa funzionalità può rimuovere alcune delle
di rilevamento o di associazione che una funzionalità RCS dovrebbe altrimenti fornire.
Registrazione delle funzionalità supportate
Il framework di telefonia si lega innanzitutto a ImsService per interrogare le caratteristiche che
supporta l'utilizzo dell'API ImsService#querySupportedImsFeatures
. Dopo il
il framework calcola le funzioni supportate da ImsService, che richiamerà
ImsService#create[...]Feature
per ogni funzionalità di cui verrà eseguito l'ImsService
responsabile. Se le funzionalità supportate dall'app IMS cambiano,
puoi utilizzare ImsService#onUpdateSupportedImsFeatures
per segnalare al framework
ricalcolare le caratteristiche supportate. Vedi il diagramma seguente per ulteriori informazioni
sull'inizializzazione e sull'associazione
di ImsService.
Figura 2: inizializzazione e associazione di ImsService
Rilevamento e verifica del framework di un'implementazione di ImsService
Una volta che ImsService è stato definito correttamente in AndroidManifest.xml, la piattaforma deve essere configurata per l'associazione (in modo sicuro) a ImsService quando appropriato. Il framework vincolato a due tipi di ImsServices:
- "Override" operatore ImsService: questi ImsServices sono precaricati nella
dispositivo ma sono collegati a uno o più operatori di telefonia mobile e saranno
associato quando viene inserita una scheda SIM corrispondente. Per la configurazione viene utilizzato
config_ims_mmtel_package_override_string
Chiave CarrierConfig per ImsServices che implementa le funzionalità MMTEL.config_ims_rcs_package_override_string
per ImsServices che implementa le funzionalità RCS.
- "Predefinito" del dispositivo ImsService: si tratta dell'imsService predefinito che viene caricato
sul dispositivo da un OEM e devono essere
progettati per fornire servizi IMS in
in tutte le situazioni in cui un operatore ImsService non sia disponibile ed è utile
situazioni in cui il dispositivo non ha una scheda SIM inserita o la scheda SIM
inserito non dispone di un operatore ImsService installato. Questo è
definiti nell'overlay del dispositivo utilizzando le seguenti configurazioni:
config_ims_mmtel_package
: Implementa le funzionalità MMTELconfig_ims_rcs_package
: Implementa le funzionalità RCS
Android non supporta le app con ImsService scaricabile di terze parti implementazioni di ImsService, pertanto tutte le implementazioni di ImsService qui definite devono essere app di sistema e devono trovarsi nel /system/priv-app/ oppure /product/priv-app/ per concedere le autorizzazioni appropriate (ovvero telefono, autorizzazioni per microfono, posizione, fotocamera e contatti). Verificando se il nome del pacchetto dell'implementazione IMS corrisponda a CarrierConfig o al dispositivo valori di overlay definiti sopra, soltanto le app attendibili e preinstallate sono limitato.
Personalizzazione
Le app che implementano un ImsService sono vincolate solo ai dispositivi su cui
sono configurate come "sostituzione" dell'operatore ImsService o "default" del dispositivo
Configurazioni di ImsService per la funzionalità MMTEL o RCS.
ImsService consente inoltre le funzionalità IMS che supporta (MMTEL e RCS) per
attivare o disattivare in modo dinamico gli aggiornamenti utilizzando
ImsService#onUpdateSupportedImsFeatures
. Questo attiva il framework
ricalcolare quali ImsService sono vincolati e quali funzionalità supportano. Se
L'app IMS aggiorna il framework senza funzionalità supportate, ImsService
verrà slegato fino al riavvio del telefono o all'inserimento di una nuova scheda SIM che
che corrisponda all'app IMS.
Priorità associazione per più ImsService
Il framework non supporta l'associazione a tutti i possibili ImsServices che sono sono precaricati sul dispositivo e si assoceranno a un massimo di due ImsServices per slot della SIM (un ImsService per ogni funzionalità) nel seguente ordine in base alle singole funzionalità:
- Il nome del pacchetto ImsService definito dal valore CarrierConfig
config_ims_[mmtel/rcs]_package_override_string
se è presente una scheda SIM inserito. - Il nome del pacchetto ImsService definito nel valore dell'overlay del dispositivo per
config_ims_[mmtel/rcs]_package
incluso il caso in cui non sia presente una SIM scheda inserita. Questo ImsService DEVE supportare la funzionalità MmTel di emergenza.
Devi avere il nome del pacchetto di ImsService definito nel CarrierConfig per ciascuno dei corrieri che utilizzeranno il pacchetto o nello overlay dispositivo se ImsService sarà l'impostazione predefinita, come definito sopra.
Analizziamo ogni caratteristica. Per un dispositivo (SIM singola o multipla) con una singola scheda SIM caricata, sono possibili due funzionalità IMS: MMTel e RCS. Il framework cercherà di eseguire il binding nell'ordine definito sopra per ogni caratteristica e se la funzionalità non è disponibile per il servizio ImsService definito nell'operatore Override della configurazione, il framework eseguirà il fallback al tuo ImsService predefinito. Quindi, ad esempio, la tabella seguente descrive quale funzionalità di IMS verrà utilizzata dal framework utilizzare tre app IMS che implementano ImsServices installate su un sistema con le seguenti funzionalità:
- L'operatore A ImsService supporta RCS
- L'operatore B ImsService supporta RCS e MMTel
- L'OEM ImsService supporta RCS e MMTel
Scheda SIM inserita | Funzionalità RCS | Funzionalità MMTel |
---|---|---|
Vettore A | Vettore A | OEM |
Operatore B | Operatore B | Operatore B |
Nessuna SIM rilevata | OEM | OEM |
Convalida
Gli strumenti per verificare l'implementazione di IMS non sono inclusi poiché il servizio IMS sono estremamente grandi e utilizzano speciali apparecchiature di verifica. La possono verificare solo che il framework di telefonia risponda correttamente alle API ImsService.
Sviluppa un'app IMS
Quando sviluppi un'app IMS che si interfaccia con lo stack di telefonia Android, ti consigliamo di specificare che l'app può ascoltare o modificare lo stato Istanza ImsService collegata per l'abbonamento a un operatore specifico.
Per ascoltare o modificare lo stato di ImsService per le funzionalità MMTEL e RCS, usa
il
ImsManager
per ottenere un'istanza
ImsMmTelManager
,
ImsRcsManager
,
o specifici di IMS
ProvisioningManager
. L'app può quindi ascoltare gli stati di provisioning e di servizio specifici di IMS
quali:
- Funzionalità MMTEL o RCS abilitate e disponibili
- Aggiornamenti quando cambia lo stato di registrazione IMS
- Stato provisioning delle funzionalità IMS
- Funzionalità di messaggistica immediata attivate dall'utente
Utilizzare ImsStateCallback
Sebbene ImsService sia un servizio associato in modo permanente, il servizio potrebbero cambiare quando diventano attivi una nuova scheda SIM o un abbonamento incorporato o quando cambia la configurazione di un operatore. Poiché ImsService non fa parte di telefonia mobile, un'app potrebbe riscontrare eccezioni impreviste accedere alle API IMS se ImsService si arresta in modo invisibile o non è associato a causa di un abbonamento o una modifica alla configurazione.
Sui dispositivi con Android 13 o versioni successive, per monitorare
se l'istanza ImsService di un abbonamento associato è
disponibili o non disponibili, un'app può usare
ImsStateCallback
. Quando riceviamo un'istanza di ImsMmTelManager
o ImsRcsManager
,
consiglia all'app di registrarsi prima per un callback dello stato IMS utilizzando
ImsMmTelManager#registerImsStateCallback
:
o
ImsRcsManager#registerImsStateCallback
.
Per continuare a ricevere aggiornamenti su callback per abbonamenti specifici quando
ImsService diventa di nuovo disponibile, l'app deve annullare la registrazione o eliminare quelli esistenti
callback registrati tramite ImsMmTelManager
, ImsRcsManager
o
ProvisioningManager
; e registrare nuovi callback.
Se è presente una sottoscrizione che non supporta IMS, il framework chiama
ImsStateCallback#onUnavailable
con il motivo
REASON_NO_IMS_SERVICE_CONFIGURED
.
Ciò significa che ImsService e le API correlate a IMS non sono disponibili per
abbonamento.
Nell'improbabile caso in cui il processo di telefonia si arresti in modo anomalo, l'app riceve
ImsStateCallback#onError
e non riceve più aggiornamenti sull'istanza ImsStateCallback
registrata.
Per eseguire il ripristino da questa condizione, registra di nuovo l'istanza ImsStateCallback
per
all'abbonamento associato chiamando
ImsMmTelManager#registerImsStateCallback
o
ImsRcsManager#registerImsStateCallback
.