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