Самоуправляемое руководство по вызовам Audio Manager

В этом руководстве рассматриваются коммуникационные приложения, такие как передача голоса по Интернет-протоколу (VoIP), которые хотят самостоятельно управлять состоянием своего аудио и слышимого устройства.

Зарегистрировать обратный аудиозвонок

Сначала создайте AudioDeviceCallback , который уведомляет ваше приложение, когда аудиоустройства подключаются или отключаются от устройства.

Котлин

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

Проверьте наличие активного устройства связи

Аудиоменеджер позволяет узнать, какое коммуникационное устройство активно в данный момент.

Котлин

val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice

Ява

AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();

Прослушивание изменений устройства связи позволяет вашему приложению узнать, когда применяется маршрутизация и выбранное вами устройство активно.

Котлин

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

Найти аудиоустройство BLE

Используйте getAvailableCommuncationDevices() чтобы узнать, какие устройства доступны для вызова VoIP. Используйте AudioDeviceInfo чтобы узнать, является ли устройство гарнитурой BLE. В этом примере ищется первое устройство, поддерживающее BLE Audio, но вы также можете рассмотреть возможность поиска всех поддерживаемых устройств и предоставления пользователям возможности выбора.

Котлин


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

Установить устройство связи

Найдя совместимое устройство, используйте setCommunicationDevice чтобы указать устройство, к которому вы хотите выполнить маршрутизацию. Проверка результата сообщает вашему приложению, пытается ли аудиоменеджер настроить устройство или возникла ошибка.

Котлин


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)

Теперь, когда аудиоустройство BLE настроено, при совершении вызова аудиопоток будет иметь правильную маршрутизацию звука.

Завершить сеанс

После того как ваше приложение завершит вызов или сеанс, очистите активное устройство связи. Это помогает обеспечить пользователю удобство при перемещении между различными приложениями.

Котлин


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

Ява


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