Przewodnik po samodzielnym zarządzaniu rozmowami w Menedżerze dźwięku

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ę.

KotlinJava
val audioDeviceCallback: AudioDeviceCallback = object : AudioDeviceCallback() {
  override fun onAudioDevicesAdded(addedDevices: Array) {}
  override fun onAudioDevicesRemoved(removedDevices: Array) {}
}

audioManager.registerAudioDeviceCallback(audioDeviceCallback)
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.

KotlinJava
val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice
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.

KotlinJava
val listener =
  OnCommunicationDeviceChangedListener { device -> // Handle changes
    currentCommunicationDevice = device
  }
audioManager.addOnCommunicationDeviceChangedListener(executor, listener)
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.

KotlinJava

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

// Get list of currently available devices
List

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.

KotlinJava

val result = audioManager.setCommunicationDevice(selectedDevice)
if (!result) {
 
// Handle error.
}
// Wait for currentCommunicationDevice to become selectedDevice with a timeout (e.g. 30s)

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.

KotlinJava

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

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