Android 9 fornisce API per supportare meglio le app di chiamata di terze parti. Le app di chiamate di terze parti in genere si basano su API di telefonia come
la trasmissione PHONE_STATE
per coesistere con le chiamate telefoniche degli operatori. Di conseguenza, le app di chiamata di terze parti devono dare la priorità alle chiamate dell'operatore e spesso ricorrono al rifiuto silenzioso delle chiamate in arrivo nell'app o all'interruzione di una chiamata in corso per fare spazio a una chiamata dell'operatore.
Le API di Android 9 supportano scenari di chiamate simultanee tra app di terze parti e chiamate dell'operatore. In questo modo è possibile, ad esempio, ricevere una chiamata in arrivo di terze parti mentre si è impegnati in una chiamata con l'operatore. Il framework si assume la responsabilità di garantire che la chiamata dell'operatore venga mantenuta quando l'utente partecipa alla chiamata di terze parti.
In Android 9, le app di chiamata di terze parti sono invitate a
implementare l'API ConnectionService
autogestita. Per saperne di più su come
creare un'app di chiamata utilizzando questa API, consulta
Crea un'app di chiamata.
L'API ConnectionService
autogestita offre inoltre agli sviluppatori l'opportunità
di attivare la registrazione delle chiamate nella propria app nel registro chiamate di sistema (vedi
EXTRA_LOG_SELF_MANAGED_CALLS
).
In base ai requisiti del
documento di definizione della compatibilità Android (CDD)
(sezione 7.4.1.2), devi assicurarti che l'app Telefono o il dialer mostri queste
voci del registro chiamate e il nome dell'app di chiamata di terze parti da cui
è stata effettuata la chiamata (per un esempio di come l'app Dialer AOSP soddisfa questo
requisito, vedi
Voci del registro chiamate di app di chiamata di terze parti).
Le app sono responsabili dell'impostazione di
CAPABILITY_SUPPORT_HOLD
e
CAPABILITY_HOLD
sulle connessioni delle proprie app. Tuttavia, è possibile che un'app non possa effettuare una
chiamata in alcune circostanze. Il quadro include disposizioni per la risoluzione
di questi tipi di casi.
Scenari
Devi modificare l'app Telefono per gestire i seguenti scenari.
Gestire le chiamate in arrivo che interrompono una chiamata in corso
In uno scenario in cui è in corso una chiamata di terze parti (ad es.in una chiamata SuperCaller) che non supporta la messa in attesa e l'utente riceve una chiamata mobile (ad es. utilizzando il suo operatore FooCom), l'app Telefono o Dialer deve indicare all'utente che se risponde alla chiamata di rete mobile, la chiamata di terze parti in corso terminerà.
Questa esperienza utente è importante perché un'app di chiamate di terze parti potrebbe avere una chiamata in corso che non può essere messa in attesa dal framework. Se rispondi a una nuova chiamata mobile, la chiamata di terze parti in corso viene disconnessa.
Per un esempio, vedi l'interfaccia utente nella figura:
Figura 1. Chiamata in arrivo che interrompe una chiamata di terze parti in corso.
L'app Telefono può verificare se una chiamata in arrivo causa la disconnessione di un'altra chiamata controllando gli extra per le chiamate.
Assicurati che
EXTRA_ANSWERING_DROPS_FG_CALL
sia impostato su TRUE
e che
EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME
sia impostato sul nome dell'app la cui chiamata viene interrotta quando si risponde alla
chiamata mobile in arrivo.
Voci del registro chiamate da app di chiamata di terze parti
Gli sviluppatori di app di chiamata di terze parti possono attivare la registrazione delle chiamate nella propria app nel registro chiamate di sistema (vedi EXTRA_LOG_SELF_MANAGED_CALLS
). Ciò significa che è possibile avere voci nel registro chiamate che non riguardano le chiamate di rete mobile.
Quando l'app Telefono AOSP mostra le voci del registro chiamate relative a un'app di chiamate di terze parti, il nome dell'app in cui è stata effettuata la chiamata viene visualizzato nel registro chiamate, come illustrato nella figura:
Figura 2. Voce del registro chiamate con il nome dell'app di chiamata di terze parti nell'app Telefono.
Per determinare il nome di un'app associata a una voce del registro chiamate, utilizza le colonne
PHONE_ACCOUNT_COMPONENT_NAME
e
PHONE_ACCOUNT_ID
nel provider del registro chiamate per creare un'istanza di
PhoneAccountHandle
,
che identifica l'origine di una voce del registro chiamate. Query
TelecomManager
per ottenere i dettagli del PhoneAccount.
Per determinare se una voce del registro chiamate proviene da un'app di chiamate di terze parti, controlla le
funzionalità PhoneAccount
per vedere se
CAPABILITY_SELF_MANAGED
è impostato.
Il metodo
getLabel
dell'oggetto PhoneAccount
restituito restituisce il nome dell'app associata
a una voce del registro chiamate dell'app di chiamate di terze parti.
Convalida
Per verificare che il tuo dispositivo supporti app di chiamata di terze parti, utilizza l'app di test Telecomm, che implementa l'API ConnectionService autogestita. L'app si trova in
/packages/services/Telecomm/testapps/
.
Crea l'app di test dalla radice del repository di origine Android utilizzando:
mmma packages/services/Telecomm/testapps/
Installa l'apk di build utilizzando
adb install -g -r <apk path>
. Viene quindi aggiunta un'icona di esempio autogestita al launcher.Tocca l'icona per aprire l'app di test.
Gestire le chiamate in arrivo che interrompono una chiamata in corso
Segui questi passaggi per verificare che una chiamata in arrivo interrompa una chiamata di terze parti in corso.
Figura 3. Testa l'app con implementazioni di esempio dell'API ConnectionService.
- Deseleziona l'opzione Holdable.
- Tocca IN USCITA per avviare una nuova chiamata di esempio in uscita.
- Tocca il pulsante ATTIVA per attivare la chiamata.
- Chiama il numero di telefono del dispositivo in fase di test con un altro smartphone. In questo modo viene richiamato lo scenario in cui al dialer viene fornito il nome di un'app, la cui chiamata verrà interrotta.
- Al termine, tocca il pulsante DISCONNETTI nell'app di test.
Voci del registro chiamate da app di chiamata di terze parti
Dopo aver completato i passaggi precedenti, l'app di test dovrebbe aver registrato una chiamata nel log delle chiamate di sistema. Per verificare che il dispositivo registri le chiamate dalle app di chiamata di terze parti, apri l'app Telefono e verifica che la chiamata venga visualizzata nel registro chiamate di sistema.