Guía sobre llamadas autoadministradas del Administrador de audio

Esta guía abarca las aplicaciones de comunicación, como el protocolo de voz a través de Internet (VoIP), que desean administrar por cuenta propia el estado del dispositivo de audio y de audio.

Registrar devolución de llamada de audio

Primero, crea un AudioDeviceCallback, que notifique a tu app cuando los dispositivos de audio se conecten o se desconecten del dispositivo.

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

Comprobar si hay un dispositivo de comunicación activo

El administrador de audio te permite saber qué dispositivo de comunicación está activo.

Kotlin

val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice

Java

AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();

Detectar cuando cambia un dispositivo de comunicación le permite a tu app saber cuándo se aplica el enrutamiento y cuándo está activo el dispositivo que seleccionaste.

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 VoIP. Usa AudioDeviceInfo para comprobar si el dispositivo es un auricular BLE. En este ejemplo, se busca el primer dispositivo compatible con audio BLE, pero también podrías 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. Al comprobar el resultado, se informa a la app si el administrador de audio está intentando configurar el dispositivo o si se produjo 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 BLE Audio, al realizar una llamada, la transmisión de audio tendrá el enrutamiento de audio correcto.

Cómo finalizar 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 excelente experiencia al pasar de una aplicación a otra.

Kotlin


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

Java


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