Questa guida riguarda le applicazioni di comunicazione, come Voice over Internet Protocol (VoIP), che desiderano gestire autonomamente l'audio e lo stato del dispositivo udibile.
Registra callback audio
Innanzitutto, crea un AudioDeviceCallback
, che invia una notifica alla tua app quando i dispositivi audio si connettono o si disconnettono dal dispositivo.
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);
Verificare la presenza di un dispositivo di comunicazione attivo
Gestione audio ti consente di sapere quale dispositivo di comunicazione è attualmente attivo.
Kotlin
val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice
Java
AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();
L'ascolto di quando un dispositivo di comunicazione è stato modificato consente all'app di sapere quando è stato applicato il routing e il dispositivo selezionato è attivo.
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);
Trova dispositivo audio BLE
Utilizza getAvailableCommuncationDevices()
per vedere quali dispositivi sono disponibili per una chiamata VoIP. Usa AudioDeviceInfo
per verificare se il dispositivo è un visore BLE. In questo esempio viene cercato il primo dispositivo che supporta BLE Audio, ma potresti anche prendere in considerazione l'idea di trovare tutti i dispositivi supportati e di consentire agli utenti di scegliere.
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;
}
}
Imposta dispositivo di comunicazione
Dopo aver trovato un dispositivo compatibile, usa setCommunicationDevice
per impostare il dispositivo a cui vuoi indirizzare. La verifica dei risultati indica alla tua app se Gestione audio sta tentando di configurare il dispositivo o se si è verificato un errore.
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)
Ora che il dispositivo BLE Audio è stato configurato, quando effettui una chiamata, lo stream audio avrà il routing audio corretto.
Terminare la sessione
Dopo che l'app termina una chiamata o una sessione, cancella i dati del dispositivo di comunicazione attivo. Questo contribuisce a garantire all'utente un'ottima esperienza quando si sposta tra applicazioni diverse.
Kotlin
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice()
Java
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice();