Android 9 fornisce API per supportare meglio le app di chiamata di terze parti (3P). Le app per chiamate 3P in genere si basano su API di telefonia come la trasmissione PHONE_STATE
per coesistere insieme alle chiamate telefoniche dell'operatore. Di conseguenza, le app per chiamate 3P devono dare priorità alle chiamate dell'operatore e spesso ricorrere al rifiuto silenzioso delle chiamate in arrivo nell'app o alla conclusione di una chiamata in corso per far posto a una chiamata dell'operatore.
Le API in Android 9 supportano scenari di chiamate simultanee tra app 3P e chiamate dell'operatore. Ciò rende possibile, ad esempio, ricevere una chiamata 3P in entrata mentre si è impegnati in una chiamata dell'operatore. Il framework si assume la responsabilità di garantire che la chiamata dell'operatore venga trattenuta quando l'utente partecipa alla chiamata 3P.
In Android 9, le app per chiamate 3P sono incoraggiate a implementare l'API ConnectionService
autogestita. Per ulteriori informazioni su come creare un'app per chiamate utilizzando questa API, vedi Creare un'app per chiamate .
L'API ConnectionService
autogestita offre inoltre agli sviluppatori l'opportunità di scegliere di registrare le chiamate nella propria app nel registro delle chiamate di sistema (vedere EXTRA_LOG_SELF_MANAGED_CALLS
). In base ai requisiti del Documento di definizione della compatibilità Android (CDD) (sezione 7.4.1.2), è necessario assicurarsi che l'app di chiamata/telefono visualizzi queste voci del registro delle chiamate e mostri il nome dell'app di chiamata 3P da cui ha avuto origine la chiamata (per un esempio di in che modo l'app di connessione AOSP soddisfa questo requisito, vedere Voci del registro chiamate da app di chiamata 3P ).
Le app sono responsabili dell'impostazione CAPABILITY_SUPPORT_HOLD
e CAPABILITY_HOLD
sulle connessioni delle loro app. Tuttavia, in alcune circostanze è possibile che un'app non riesca a trattenere una chiamata. Il quadro prevede disposizioni per la risoluzione di questo tipo di casi.
Scenari
Dovresti modificare l'app di connessione per gestire i seguenti scenari.
Gestione delle chiamate in entrata che disconnettono una chiamata in corso
In uno scenario in cui è in corso una chiamata 3P (ad esempio in una chiamata SuperCaller) che non supporta l'attesa e l'utente riceve una chiamata su cellulare (ad esempio tramite il proprio operatore FooCom), l'app Dialer/Phone dovrebbe indicare all'utente che rispondendo la chiamata sulla rete mobile terminerà la chiamata 3P in corso.
Questa esperienza utente è importante poiché un'app di chiamata 3P potrebbe avere una chiamata in corso che non può essere trattenuta dal framework. La risposta a una nuova chiamata sul cellulare comporta la disconnessione della chiamata 3P in corso.
Vedi l'interfaccia utente di seguito per un esempio:
L'app di composizione può verificare se una chiamata in arrivo causa la disconnessione di un'altra chiamata controllando gli extra della chiamata . Assicurati che EXTRA_ANSWERING_DROPS_FG_CALL
sia impostato su TRUE
e EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME
sia impostato sul nome dell'app la cui chiamata viene disconnessa quando si risponde alla chiamata in arrivo sul cellulare.
Voci del registro chiamate dalle app di chiamata 3P
Gli sviluppatori di app per chiamate 3P possono scegliere di registrare le chiamate nella propria app nel registro delle chiamate di sistema (vedere EXTRA_LOG_SELF_MANAGED_CALLS
). Ciò significa che nel registro delle chiamate possono essere presenti voci che non riguardano le chiamate sulla rete mobile.
Quando l'app di connessione AOSP visualizza le voci del registro delle chiamate relative a un'app per chiamate 3P, il nome dell'app in cui è avvenuta la chiamata viene visualizzato nel registro delle chiamate, come illustrato di seguito:
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. Interrogare TelecomManager
per ottenere i dettagli per PhoneAccount.
Per determinare se una voce del registro chiamate proviene da un'app di chiamata di terze parti, controlla le funzionalità PhoneAccount
per vedere se CAPABILITY_SELF_MANAGED
è impostato.
Il metodo getLabel
del PhoneAccount
restituito restituisce il nome dell'app associata a una voce del registro chiamate dall'app di chiamata 3P.
Validazione
Per verificare che il tuo dispositivo supporti le app di chiamata 3P, utilizza l'applicazione di test Telecomm, che implementa l'API ConnectionService autogestita. L'applicazione si trova in /packages/services/Telecomm/testapps/
.
Crea l'app di test dalla radice del tuo repository di origine Android utilizzando:
mmma packages/services/Telecomm/testapps/
Installa l'apk di build utilizzando
adb install -g -r <apk path>
. Un'icona di esempio autogestito viene quindi aggiunta al tuo launcher.Tocca l'icona per aprire l'applicazione di prova.
Gestione delle chiamate in entrata che disconnettono una chiamata in corso
Seguire questi passaggi per verificare che una chiamata in arrivo disconnette una chiamata 3P in corso.
- Deseleziona l'opzione Conservabile .
- Tocca IN USCITA per avviare una nuova chiamata in uscita di esempio.
- Tocca il pulsante ATTIVO per rendere attiva la chiamata.
- Chiamare con un altro telefono il numero di telefono del dispositivo in prova. Ciò richiama lo scenario in cui al tuo dialer viene fornito il nome di un'app, la cui chiamata verrà disconnessa.
- Al termine, tocca il pulsante DISCONNETTI nell'app di prova.
Voci del registro chiamate dalle app di chiamata 3P
Dopo aver completato i passaggi precedenti, l'app di test dovrebbe aver registrato una chiamata nel registro delle chiamate di sistema. Per verificare che il dispositivo registri le chiamate dalle app di chiamata 3P, apri l'app di composizione e conferma che la chiamata venga visualizzata nel registro delle chiamate di sistema.