Gestire le chiamate tramite l'API Telecom

Questa guida spiega come indirizzare l'audio per i dispositivi Bluetooth utilizzando il API Telecom e imposta la connessione per Chiamate VoIP. Leggi Guida alla creazione di un'app per le chiamate prima di continuare.

Utilizzando il ConnectionService e Connection corsi, puoi accedere lo stato dell'audio e un elenco di dispositivi Bluetooth disponibili e può indirizzare audio a un dispositivo Bluetooth selezionato.

Connessione e servizio di connessione VoIP

Crea un corso VoIPConnection che si estende da Connection Questa classe controlla lo stato della chiamata corrente. Come Guida alla creazione di un'app per le chiamate , impostala come applicazione autogestita e imposta la modalità audio per un VoIP un'applicazione.

KotlinJava
class VoIPConnection : Connection() {
 
init {
    setConnectionProperties
(PROPERTY_SELF_MANAGED)
    setAudioModeIsVoip
(true)
 
}
}
public class VoIPConnection extends Connection {
 
public VoIPConnection() {
    setConnectionProperties
(PROPERTY_SELF_MANAGED);
    setAudioModeIsVoip
(true);
 
}
}

Poi, restituisci un'istanza di questa classe in ConnectionService quando in entrata o in uscita.

KotlinJava
class VoIPConnectionService : ConnectionService() {
 
override fun onCreateOutgoingConnection(
    connectionManagerPhoneAccount
: PhoneAccountHandle,
    request
: ConnectionRequest,
 
): Connection {
   
return VoIPConnection()
 
}
}
public class VoIPConnectionService extends ConnectionService {
 
@Override
 
public Connection onCreateOutgoingConnection(PhoneAccountHandle connectionManagerPhoneAccount, ConnectionRequest request) {
   
return new VoIPConnection();
 
}
}

Assicurati che il file manifest punti correttamente alla classe VoIPConnectionService.

<service android:name=".voip.TelegramConnectionService" android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
 
<intent-filter>
   
<action android:name="android.telecom.ConnectionService"/>
 
</intent-filter>
</service>

Con questi Connection e ConnectionService corsi, tu puoi controllare quale dispositivo e quale tipo di routing audio vuoi utilizzare durante una chiamata.

Recuperare lo stato audio attuale

Per ottenere lo stato audio corrente, chiama getCallAudioState() getCallAudioState() restituisce se il dispositivo è in streaming tramite Bluetooth, Auricolare, Con cavo o Altoparlante.

mAudioState = connection.getCallAudioState()

In stato modificato

Sottoscrivi le modifiche in CallAudioState eseguendo l'override onCallAudioStateChanged() Ti avvisa in caso di modifiche allo stato.

KotlinJava
fun onCallAudioStateChanged(audioState: CallAudioState) {
  mAudioState
= audioState
}
@Override
public void onCallAudioStateChanged(CallAudioState audioState) {
  mAudioState
= audioState;
}

Scarica il dispositivo attuale

Recupera il dispositivo attualmente attivo utilizzando CallAudioState.getActiveBluetoothDevice() Questa funzione restituisce il dispositivo Bluetooth attivo.

KotlinJava
val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();

Scarica dispositivi Bluetooth

Visualizza un elenco di dispositivi Bluetooth disponibili per il routing dell'audio delle chiamate utilizzando CallAudioState.getSupportedBluetoothDevices()

KotlinJava
val availableBluetoothDevices: Collection
Collection

Instrada l'audio della chiamata

Indirizza l'audio della chiamata a un dispositivo Bluetooth disponibile utilizzando requestBluetoothAudio(BluetoothDevice):

requestBluetoothAudio(availableBluetoothDevices[0]);

Utilizzo del livello API 23 o superiore

Attiva ROUTE_BLUETOOTH senza specificare il dispositivo setAudioRoute(int). L'impostazione predefinita prevede l'indirizzamento ai dispositivi Bluetooth attivi attuali su Android 9 e versioni successive.

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);