Guía sobre llamadas autoadministradas del Administrador de audio

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