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

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

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

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

val audioDeviceCallback: AudioDeviceCallback = object : AudioDeviceCallback() {
 
override fun onAudioDevicesAdded(addedDevices: Array
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

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

Найдя совместимое устройство, используйте 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();