Android 9 fornisce API per supportare meglio le app di chiamate di terze parti. Le app di chiamata di terze parti in genere si basano su API di telefonia come la trasmissione PHONE_STATE
per coesistere con le chiamate dell'operatore. 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 far posto a una chiamata dell'operatore.
Le API in Android 9 supportano scenari di chiamata simultanei tra app di terze parti e chiamate dell'operatore. In questo modo, ad esempio, è possibile ricevere una chiamata di terze parti in arrivo mentre si è impegnati in una chiamata con l'operatore. Il framework si assume la responsabilità di garantire che la chiamata dell'operatore venga messa in attesa 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 ulteriori informazioni su come creare un'app di chiamata utilizzando questa API, consulta Creare un'app di chiamata.
L'API ConnectionService
autogestita offre inoltre agli sviluppatori l'opportunità di attivare la registrazione delle chiamate nella loro 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 la tua app Telefono o Telefono mostri queste voci del registro chiamate e il nome dell'app di chiamata di terze parti da cui è partita la chiamata (per un esempio di come l'app Telefono AOSP soddisfi questo requisito, vedi Voci del registro chiamate da app di chiamata di terze parti).
Le app sono responsabili dell'impostazione di
CAPABILITY_SUPPORT_HOLD
e
CAPABILITY_HOLD
sulle connessioni delle loro app. Tuttavia, è possibile che un'app non possa mantenere una chiamata in alcune circostanze. Il framework include le disposizioni
per risolvere questi tipi di casi.
Scenari
Dovresti modificare l'app Telefono per gestire gli scenari che seguono.
Gestire le chiamate in arrivo che disconnettono una chiamata in corso
In uno scenario in cui è in corso una chiamata di terze parti (ad esempio una chiamata SuperCaller) che non supporta la messa in attesa e l'utente riceve una chiamata su rete mobile (ad esempio, utilizzando il proprio operatore FooCom), l'app Telefono o Telefono deve indicare all' utente che la risposta alla chiamata della rete mobile interromperà la chiamata di terze parti in corso.
Questa esperienza utente è importante perché un'app di chiamata di terze parti potrebbe avere una chiamata in corso che non può essere gestita dal framework. La risposta a una nuova chiamata mobile comporta la disconnessione della chiamata in corso con terze parti.
Per un esempio, consulta l'interfaccia utente nella figura:
Figura 1. Chiamata in arrivo che disconnette 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 di 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 di cui viene disconnessa la chiamata quando rispondi alla
chiamata in arrivo sul dispositivo mobile.
Voce Registro chiamate di 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 non relative alle chiamate sulla rete mobile.
Quando l'app Telefono AOSP visualizza le voci del registro chiamate relative a un'app di chiamata di terze parti, nel registro chiamate viene visualizzato il nome dell'app in cui è stata effettuata la chiamata, come illustrato nella figura:
Figura 2. Voce del registro chiamate con il nome dell'app per le chiamate 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. Esegui una query su
TelecomManager
per ottenere i dettagli di 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 è impostata su CAPABILITY_SELF_MANAGED
.
Il metodo
getLabel
dell'oggetto PhoneAccount
restituito restituisce il nome dell'app associata
a una voce del registro chiamate dell'app di chiamata di terze parti.
Convalida
Per verificare che il tuo dispositivo supporti le 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/
.
Compila l'app di test dalla radice del repository di codice sorgente Android utilizzando:
mmma packages/services/Telecomm/testapps/
Installa l'apk di compilazione utilizzando
adb install -g -r <apk path>
. Al tuo Avvio app viene aggiunta un'icona di esempio gestita autonomamente.Tocca l'icona per aprire l'app di test.
Gestire le chiamate in arrivo che disconnettono una chiamata in corso
Segui questi passaggi per verificare che una chiamata in arrivo disconnetta 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 ENTRATA per avviare una nuova chiamata in uscita di esempio.
- Tocca il pulsante ATTIVA per attivare la chiamata.
- Chiama il numero di telefono del dispositivo in test con un altro telefono. Questo riattiva lo scenario in cui al dialer viene fornito il nome di un'app, la cui chiamata verrà disconnessa.
- Al termine, tocca il pulsante DISCONNETTI nell'app di test.
Voci del registro chiamate di app per le chiamate 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 da app di chiamata di terze parti, apri l'app Telefono e verifica che la chiamata venga visualizzata nel registro chiamate di sistema.