Panduan ini mencakup aplikasi komunikasi, seperti Voice over Internet Protocol (VoIP), yang ingin mengelola sendiri status perangkat yang dapat didengar dan audio.
Daftarkan callback audio
Pertama-tama, buat AudioDeviceCallback
yang akan memberi tahu aplikasi Anda saat perangkat audio terhubung atau terputus dari perangkat.
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);
Periksa perangkat komunikasi yang aktif
Pengelola audio memberi tahu Anda perangkat komunikasi mana yang sedang aktif.
Kotlin
val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice
Java
AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();
Mendengarkan kapan perangkat komunikasi telah berubah memungkinkan aplikasi Anda mengetahui kapan pemilihan rute diterapkan dan perangkat yang Anda pilih aktif.
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);
Menemukan perangkat audio BLE
Gunakan getAvailableCommuncationDevices()
untuk mengetahui perangkat yang tersedia untuk panggilan VoIP. Gunakan AudioDeviceInfo
untuk melihat apakah perangkat merupakan headset BLE. Contoh ini mencari perangkat pertama yang mendukung Audio BLE, tetapi Anda juga dapat mempertimbangkan untuk menemukan semua perangkat yang didukung dan mengizinkan pengguna untuk memilih.
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;
}
}
Menyetel perangkat komunikasi
Setelah menemukan perangkat yang kompatibel, gunakan setCommunicationDevice
untuk menyetel perangkat yang ingin dituju. Memeriksa hasilnya akan memberi tahu aplikasi Anda apakah pengelola audio mencoba menyetel perangkat atau mengalami error.
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)
Setelah perangkat BLE Audio ditetapkan, saat melakukan panggilan, streaming audio akan memiliki pemilihan rute audio yang benar.
Mengakhiri sesi
Setelah aplikasi Anda menyelesaikan panggilan atau sesi, hapus perangkat komunikasi yang aktif. Hal ini membantu memastikan pengguna memiliki pengalaman yang baik saat berpindah antar-aplikasi yang berbeda.
Kotlin
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice()
Java
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice();