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.

Kotlin

class VoIPConnection : Connection() {
  init {
    setConnectionProperties(PROPERTY_SELF_MANAGED)
    setAudioModeIsVoip(true)
  }
}

Java

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.

Kotlin

class VoIPConnectionService : ConnectionService() {
  override fun onCreateOutgoingConnection(
    connectionManagerPhoneAccount: PhoneAccountHandle,
    request: ConnectionRequest,
  ): Connection {
    return VoIPConnection()
  }
}

Java

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.

Kotlin

fun onCallAudioStateChanged(audioState: CallAudioState) {
  mAudioState = audioState
}

Java

@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.

Kotlin

val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()

Java

BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();

Scarica dispositivi Bluetooth

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

Kotlin

val availableBluetoothDevices: Collection =
  mAudioState.getSupportedBluetoothDevices()

Java

Collection availableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();

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);