Gérer les appels avec l'API Telecom

Ce guide explique comment router le contenu audio des appareils Bluetooth à l'aide des API Telecom et définissez la connexion pour Appels VoIP Consultez les Guide Créer une application d'appel avant de continuer.

En utilisant ConnectionService et Connection, vous pouvez accéder l'état audio et la liste des périphériques Bluetooth disponibles, et peut acheminer vers un appareil Bluetooth sélectionné.

Connexion et service de connexion VoIP

Créez une classe VoIPConnection qui s'étend de Connection Cette classe contrôle l'état de l'appel en cours. En tant que Guide Créer une application d'appel s'effectue en tant qu'application autogérée et définissez le mode audio application.

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

Ensuite, renvoyez une instance de cette classe dans ConnectionService lorsqu'un entrant ou sortant.

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

Assurez-vous que le fichier manifeste pointe correctement vers la 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>

Avec ces Connection personnalisés et ConnectionService cours, vous vous pouvez contrôler l'appareil et le type de routage audio à utiliser .

Obtenir l'état actuel de l'audio

Pour obtenir l'état actuel de l'audio, appelez getCallAudioState() getCallAudioState() apparaît si l'appareil diffuse du contenu en streaming via le Bluetooth, un écouteur, un câble ou Enceinte :

mAudioState = connection.getCallAudioState()

Modification de l'état activé

S'abonner aux modifications de CallAudioState en remplaçant onCallAudioStateChanged() Vous êtes ainsi averti en cas de changement de l'état.

Kotlin

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

Java

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

Obtenir l'appareil actuel

Obtenir l'appareil actif actuel à l'aide de CallAudioState.getActiveBluetoothDevice() Cette fonction renvoie l'appareil Bluetooth actif.

Kotlin

val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()

Java

BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();

Obtenir des appareils Bluetooth

Obtenez la liste des appareils Bluetooth disponibles pour le routage des appels via CallAudioState.getSupportedBluetoothDevices()

Kotlin

val availableBluetoothDevices: Collection =
  mAudioState.getSupportedBluetoothDevices()

Java

Collection availableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();

Rediriger l'audio de l'appel

Rediriger l'appel audio vers un appareil Bluetooth disponible via requestBluetoothAudio(BluetoothDevice):

requestBluetoothAudio(availableBluetoothDevices[0]);

Avec le niveau d'API 23 ou supérieur

Activer ROUTE_BLUETOOTH sans spécifier l'appareil à l'aide de setAudioRoute(int) Ce paramètre de routage s'effectue par défaut vers les appareils Bluetooth actifs sous Android 9 ou version ultérieure.

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);