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