Ce guide concerne les applications de communication, telles que VoIP (Voice over Internet Protocol), qui souhaitent gérer elles-mêmes l'état de leur appareil audio et auditif.
Enregistrer un rappel audio
Commencez par créer un AudioDeviceCallback
, qui avertit votre application lorsqu'un appareil audio se connecte ou se déconnecte.
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);
Vérifier si un appareil de communication est actif
Le gestionnaire audio vous permet de savoir quel appareil de communication est actuellement actif.
Kotlin
val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice
Java
AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();
Écouter les changements de périphériques 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 rechercher tous les appareils compatibles et de laisser les utilisateurs le 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;
}
}
Configurer l'appareil de communication
Après avoir trouvé un appareil compatible, utilisez setCommunicationDevice
pour définir l'appareil vers lequel vous souhaitez router. En vérifiant le résultat, vous indiquez à votre application si le gestionnaire audio essaie de configurer l'appareil ou s'il a rencontré une erreur.
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 vous avez configuré l'appareil audio BLE, lorsque vous passez un appel, le flux audio utilise le 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 une expérience optimale à l'utilisateur 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();