Ten przewodnik dotyczy aplikacji komunikacyjnych, takich jak VoIP (Voice over Internet Protocol), które chcą samodzielnie zarządzać dźwiękiem i urządzeniami, które są słyszalne.
Rejestrowanie wywołania zwrotnego audio
Najpierw utwórz AudioDeviceCallback
, który będzie powiadamiać aplikację, gdy urządzenia audio nawiążą połączenie z urządzeniem lub je rozłączą.
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ź 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();
Wykrywa ona zmianę urządzenia komunikacyjnego i informuje aplikację o zastosowaniu routingu, a 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
Użyj getAvailableCommuncationDevices()
, aby sprawdzić, na których urządzeniach można wykonywać połączenia VoIP. Użyj AudioDeviceInfo
, by sprawdzić, czy urządzenie to zestaw słuchawkowy BLE. W tym przykładzie szukamy pierwszego urządzenia obsługującego dźwięk BLE, ale możesz też znaleźć wszystkie obsługiwane urządzenia i pozwolić użytkownikom na 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
Gdy znajdziesz zgodne urządzenie, użyj opcji setCommunicationDevice
, by ustawić urządzenie, na które chcesz kierować reklamy. Zaznaczenie 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 audio BLE podczas nawiązywania połączeń strumień audio będzie miał prawidłowe kierowanie.
Zakończ sesję
Gdy aplikacja zakończy połączenie lub sesję, wyczyść aktywne urządzenie komunikacyjne. Dzięki temu użytkownik będzie mógł wygodnie przełączać się między różnymi aplikacjami.
Kotlin
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice()
Java
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice();