Ten przewodnik dotyczy aplikacji komunikacyjnych, takich jak VoIP (Voice over Internet Protocol), które chcą samodzielnie zarządzać dźwiękiem i stanem urządzenia słyszalnego.
Rejestrowanie wywołania zwrotnego
Najpierw utwórz AudioDeviceCallback
, który powiadamia aplikację, gdy urządzenia audio łączą się z urządzeniem lub rozłączają się.
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);
Sprawdź, czy jest aktywne urządzenie komunikacyjne
Menedżer dźwięku informuje, które urządzenie komunikacyjne jest obecnie aktywne.
Kotlin
val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice
Java
AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();
Nasłuchiwanie powiadomień o zmianie urządzenia komunikacyjnego informuje aplikację o zastosowaniu routingu i o tym, że wybrane urządzenie jest aktywne.
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);
Znajdź urządzenie audio BLE
Sprawdź w getAvailableCommuncationDevices()
, z których urządzeń możesz prowadzić rozmowy VoIP. Użyj AudioDeviceInfo
, aby sprawdzić, czy urządzenie to zestaw słuchawkowy BLE. W tym przykładzie szukamy pierwszego urządzenia obsługującego BLE Audio, ale możesz też znaleźć wszystkie obsługiwane urządzenia i dać użytkownikom wybór.
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;
}
}
Ustaw urządzenie komunikacyjne
Po znalezieniu zgodnego urządzenia użyj funkcji setCommunicationDevice
, aby ustawić urządzenie, na które chcesz kierować ruch. Sprawdzanie wyniku informuje aplikację, czy menedżer dźwięku próbuje skonfigurować urządzenie lub czy wystąpił błąd.
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)
Po skonfigurowaniu urządzenia BLE Audio podczas nawiązywania połączenia strumień audio będzie miał prawidłowy routing.
Zakończ sesję
Gdy aplikacja zakończy połączenie lub sesję, wyczyść aktywne urządzenie komunikacyjne. Zapewnia to wygodę użytkownikom korzystającym z różnych aplikacji.
Kotlin
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice()
Java
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice();