Este guia abrange aplicativos de comunicação, como o Voz sobre IP (VoIP), que gerenciam o estado do dispositivo de áudio e áudio por conta própria.
Registrar callback de áudio
Primeiro, crie uma AudioDeviceCallback
, que notifica o app quando dispositivos de áudio são conectados ou desconectados.
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);
Verificar se há um dispositivo de comunicação ativo
O gerenciador de áudio informa qual dispositivo de comunicação está ativo no momento.
Kotlin
val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice
Java
AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();
Ouvir a mudança de um dispositivo de comunicação permite que o app saiba quando o roteamento é aplicado e o dispositivo selecionado está ativo.
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);
Encontrar dispositivo de áudio BLE
Use getAvailableCommuncationDevices()
para ver quais dispositivos estão disponíveis para chamadas VoIP. Use AudioDeviceInfo
para ver se o dispositivo é um fone de ouvido BLE. Este exemplo procura o primeiro dispositivo com suporte para áudio BLE, mas você também pode encontrar todos os dispositivos compatíveis e permitir que os usuários escolham.
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;
}
}
Definir dispositivo de comunicação
Depois de encontrar um dispositivo compatível, use setCommunicationDevice
para definir o dispositivo que vai receber o encaminhamento. Ao verificar o resultado, o app informa se o gerenciador de áudio está tentando configurar o dispositivo ou se encontrou um erro.
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)
Agora que o dispositivo de áudio BLE foi configurado, ao fazer uma chamada, o stream de áudio terá o roteamento correto.
Encerrar a sessão
Depois que o app terminar uma chamada ou sessão, limpe o dispositivo de comunicação ativo. Isso ajuda a garantir que o usuário tenha uma ótima experiência ao alternar entre diferentes aplicativos.
Kotlin
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice()
Java
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice();