Guide des appels autogérés Audio Manager

Ce guide concerne les applications de communication, telles que le protocole VoIP (Voice over Internet Protocol), qui souhaitent gérer elles-mêmes l'état de leurs appareils audio et auditifs.

Enregistrer un rappel audio

Commencez par créer un AudioDeviceCallback, qui avertit votre application lorsque des appareils audio se connectent ou se déconnectent de l'appareil.

Kotlin

val audioDeviceCallback: AudioDeviceCallback = object : AudioDeviceCallback() {
  override fun onAudioDevicesAdded(addedDevices: Array) {}
  override fun onAudioDevicesRemoved(removedDevices: Array) {}
}

audioManager.registerAudioDeviceCallback(audioDeviceCallback)

Java

final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() {
  @Override
  public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
  }

  @Override
  public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) {
    // Handle device removal
  }
};

audioManager.registerAudioDeviceCallback(audioDeviceCallback);

Rechercher un appareil de communication actif

Le gestionnaire audio vous indique quel appareil de communication est actuellement actif.

Kotlin

val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice

Java

AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();

Écouter les changements d'appareil de communication permet à votre application de savoir quand le routage est appliqué et que l'appareil que vous avez sélectionné est actif.

Kotlin

val listener =
  OnCommunicationDeviceChangedListener { device -> // Handle changes
    currentCommunicationDevice = device
  }
audioManager.addOnCommunicationDeviceChangedListener(executor, listener)

Java

AudioManager.OnCommunicationDeviceChangedListener listener = 
      new AudioManager.OnCommunicationDeviceChangedListener() {
  @Override
  void onCommunicationDeviceChanged(AudioDeviceInfo device) {
      // Handle changes
      currentCommunicationDevice = device;
  }
};
AudioManager.addOnCommunicationDeviceChangedListener(executor, listener);

Trouver un appareil audio BLE

Utilisez getAvailableCommuncationDevices() pour afficher les appareils disponibles pour un appel VoIP. Utilisez AudioDeviceInfo pour vérifier si l'appareil est un casque BLE. Cet exemple recherche le premier appareil compatible avec l'audio BLE, mais vous pouvez également envisager de trouver tous les appareils compatibles et de permettre aux utilisateurs de choisir.

Kotlin


// Get list of currently available devices
val devices = audioManager.availableCommunicationDevices

// User choose one of the devices, let's say, TYPE_BLE_HEADSET
val userSelectedDeviceType = AudioDeviceInfo.TYPE_BLE_HEADSET

//for the device from the list
var selectedDevice: AudioDeviceInfo? = null
for (device in devices) {
  if (device.type == userSelectedDeviceType) {
    selectedDevice = device
    break
  }
}

Java


// Get list of currently available devices
List devices = audioManager.getAvailableCommunicationDevices();

// User choose one of the devices, for example, TYPE_BLE_HEADSET
int userSelectedDeviceType = AudioDeviceInfo.TYPE_BLE_HEADSET;

// Filter for the device from the list
AudioDeviceInfo selectedDevice = null;
for (AudioDeviceInfo device : devices) {
    if (device.getType() == userSelectedDeviceType) {
        selectedDevice = device;
        break;
    }
}

Définir un appareil de communication

Après avoir trouvé un appareil compatible, définissez l'appareil vers lequel vous souhaitez acheminer le trafic à l'aide de setCommunicationDevice. En consultant le résultat, vous indiquez à votre application si Audio Manager tente de configurer l'appareil ou si une erreur s'est produite.

Kotlin


val result = audioManager.setCommunicationDevice(selectedDevice)
if (!result) {
  // Handle error.
}
// Wait for currentCommunicationDevice to become selectedDevice with a timeout (e.g. 30s)

Java


boolean result = audioManager.setCommunicationDevice(selectedDevice);
if (!result) {
  // Handle error.
}
// Wait for currentCommunicationDevice to become selectedDevice with a timeout (e.g. 30s)

Maintenant que l'appareil audio BLE est configuré, lorsque vous passez un appel, le flux audio dispose du routage audio approprié.

Mettre fin à la session

Une fois que votre application a terminé un appel ou une session, effacez l'appareil de communication actif. Cela permet de garantir à l'utilisateur une expérience de qualité lorsqu'il passe d'une application à une autre.

Kotlin


// Clear the selection, ready for next call
audioManager.clearCommunicationDevice()

Java


// Clear the selection, ready for next call
audioManager.clearCommunicationDevice();