Selbstverwaltete Anrufe im Audio-Manager

In diesem Leitfaden werden Kommunikationsanwendungen wie Voice over Internet Protocol (VoIP) beschrieben, die den Audio- und hörbaren Gerätestatus selbst verwalten möchten.

Audiorückruf registrieren

Erstelle zuerst ein AudioDeviceCallback, das deine App benachrichtigt, wenn Audiogeräte eine Verbindung zum Gerät herstellen oder trennen.

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

Aktives Kommunikationsgerät prüfen

Im Audio-Manager siehst du, welches Kommunikationsgerät gerade aktiv ist.

Kotlin

val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice

Java

AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();

Wenn sich ein Kommunikationsgerät ändert, wird Ihre App darüber informiert, wenn das Routing angewendet und das ausgewählte Gerät aktiv ist.

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

BLE-Audiogerät suchen

Mit getAvailableCommuncationDevices() sehen Sie, welche Geräte für VoIP-Anrufe verfügbar sind. Prüfe mit AudioDeviceInfo, ob das Gerät ein BLE-Headset ist. In diesem Beispiel wird nach dem ersten Gerät gesucht, das BLE Audio unterstützt. Sie könnten aber auch alle unterstützten Geräte ermitteln und Nutzern die Wahl lassen.

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

Kommunikationsgerät festlegen

Wenn Sie ein kompatibles Gerät gefunden haben, verwenden Sie setCommunicationDevice, um das Gerät festzulegen, an das die Route weitergeleitet werden soll. Wenn du das Ergebnis prüfst, wird deine App darüber informiert, ob der Audio-Manager versucht, das Gerät festzulegen, oder ob ein Fehler aufgetreten ist.

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)

Nachdem das BLE Audio-Gerät eingerichtet wurde, hat der Audiostream beim Tätigen eines Anrufs das richtige Audiorouting.

Sitzung beenden

Löschen Sie das aktive Kommunikationsgerät, nachdem Ihre App einen Anruf oder eine Sitzung beendet hat. Dies trägt zu einer positiven Erfahrung des Benutzers beim Wechseln zwischen verschiedenen Anwendungen bei.

Kotlin


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

Java


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