En esta guía, se abordan las aplicaciones de comunicación, como el protocolo de voz a través de Internet (VoIP), que desean administrar por su cuenta el estado de audio y dispositivos auditivos.
Registrar devolución de llamada de audio
Primero, crea un AudioDeviceCallback
, que notifique a tu app cuando los dispositivos de audio se conecten o desconecten de él.
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);
Comprueba si hay un dispositivo de comunicación activo
El administrador de audio te permite saber qué dispositivo de comunicación está activo en ese momento.
Kotlin
val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice
Java
AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();
Cuando se detecta un cambio en un dispositivo de comunicación, tu app puede saber cuándo se aplica el enrutamiento y que el dispositivo que seleccionaste está activo.
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);
Cómo buscar un dispositivo de audio BLE
Usa getAvailableCommuncationDevices()
para ver qué dispositivos están disponibles para una llamada de VoIP. Usa AudioDeviceInfo
para ver si el dispositivo es un auricular BLE. En este ejemplo, se busca el primer dispositivo compatible con audio BLE, pero también puedes considerar buscar todos los dispositivos compatibles y permitir que los usuarios elijan.
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;
}
}
Configurar dispositivo de comunicación
Cuando encuentres un dispositivo compatible, usa setCommunicationDevice
para configurar el dispositivo al que deseas enrutar. Comprobar el resultado le informa a tu app si el administrador de audio está intentando configurar el dispositivo o si encontró un error.
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)
Ahora que se configuró el dispositivo de audio BLE, la reproducción de audio tendrá el enrutamiento de audio correcto cuando realices una llamada.
Finaliza la sesión
Una vez que la app finalice una llamada o sesión, borra el dispositivo de comunicación activo. Esto ayuda a garantizar que el usuario tenga una gran experiencia al moverse entre diferentes aplicaciones.
Kotlin
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice()
Java
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice();