Guida alle chiamate autogestite di Gestione audio

Questa guida riguarda le applicazioni di comunicazione, come il Voice over Internet Protocol (VoIP), che desiderano gestire autonomamente lo stato dei dispositivi audio e udibili.

Registra callback audio

Innanzitutto, crea un AudioDeviceCallback, che invii una notifica alla tua app quando i dispositivi audio si connettono o si disconnettono dal 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);

Verifica la presenza di un dispositivo di comunicazione attivo

Gestione audio ti consente di sapere quale dispositivo di comunicazione è attualmente attivo.

Kotlin

val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice

Java

AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();

L'ascolto di quando un dispositivo di comunicazione viene modificato consente alla tua app di sapere quando viene applicato il routing e il dispositivo selezionato è attivo.

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

Trova dispositivo audio BLE

Utilizza getAvailableCommuncationDevices() per vedere quali dispositivi sono disponibili per una chiamata VoIP. Usa AudioDeviceInfo per verificare se il dispositivo è dotato di cuffie BLE. Questo esempio cerca il primo dispositivo che supporta BLE Audio, ma potresti anche trovare tutti i dispositivi supportati e consentire agli utenti di scegliere.

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

Imposta dispositivo di comunicazione

Dopo aver trovato un dispositivo compatibile, usa setCommunicationDevice per impostare il dispositivo a cui indirizzare il percorso. Il controllo del risultato consente di informare l'app se Gestione audio sta cercando di impostare il dispositivo o se ha riscontrato un errore.

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)

Ora che il dispositivo BLE Audio è stato configurato, quando effettui una chiamata lo stream audio avrà il routing audio corretto.

Terminare la sessione

Al termine di una chiamata o di una sessione con l'app, cancella i dati del dispositivo di comunicazione attivo. Ciò contribuisce a garantire all'utente un'ottima esperienza quando si sposta tra applicazioni diverse.

Kotlin


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

Java


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