In diesem Leitfaden geht es um Kommunikationsanwendungen wie Voice over Internet Protocol (VoIP), die den Status von Audio- und Hörgeräten selbst verwalten möchten.
Sprachrückruf registrieren
Erstelle zuerst eine AudioDeviceCallback
, die deine App benachrichtigt, wenn Audiogeräte eine Verbindung mit dem 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);
Nach aktivem Kommunikationsgerät suchen
Im Audio-Manager sehen Sie, welches Kommunikationsgerät gerade aktiv ist.
Kotlin
val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice
Java
AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();
Wenn ein Kommunikationsgerät auf eine Änderung reagiert wird, weiß die App, wann das Routing angewendet wird 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()
können Sie sehen, welche Geräte für einen VoIP-Anruf verfügbar sind. Verwende AudioDeviceInfo
, um zu prüfen, 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önnen aber auch alle unterstützten Geräte ermitteln und den 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, legen Sie mit setCommunicationDevice
das Gerät fest, zu dem Sie die Weiterleitung einrichten möchten. Wenn Sie dieses Ergebnis anklicken, wird Ihre App darüber informiert, ob der Audio-Manager versucht, das Gerät einzurichten, 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, weist der Audiostream beim Tätigen eines Anrufs das richtige Audiorouting auf.
Sitzung beenden
Nachdem Ihre App einen Anruf oder eine Sitzung beendet hat, löschen Sie das aktive Kommunikationsgerät. Dies trägt dazu bei, dass der Wechsel zwischen verschiedenen Anwendungen für die Nutzenden angenehm ist.
Kotlin
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice()
Java
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice();