В этом руководстве рассматриваются коммуникационные приложения, такие как передача голоса по Интернет-протоколу (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();