이 가이드에서는 오디오 및 청취 가능한 기기 상태를 자체적으로 관리하려는 VoIP (Voice Over Internet Protocol)와 같은 통신 애플리케이션에 대해 설명합니다.
오디오 콜백 등록
먼저 오디오 기기가 기기에 연결되거나 연결 해제될 때 앱에 알리는 AudioDeviceCallback
를 만듭니다.
Kotlin
val audioDeviceCallback: AudioDeviceCallback = object : AudioDeviceCallback() { override fun onAudioDevicesAdded(addedDevices: Array) {} override fun onAudioDevicesRemoved(removedDevices: Array ) {} } audioManager.registerAudioDeviceCallback(audioDeviceCallback)
자바
final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() { @Override public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) { } @Override public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) { // Handle device removal } }; audioManager.registerAudioDeviceCallback(audioDeviceCallback);
통신 중인 기기 확인
오디오 관리자를 사용하면 현재 사용 중인 통신 기기를 알 수 있습니다.
Kotlin
val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice
자바
AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();
통신 기기가 변경된 경우를 수신 대기하면 라우팅이 적용되고 선택한 기기가 활성 상태일 때 앱이 이를 알 수 있습니다.
Kotlin
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 오디오를 지원하는 첫 번째 기기를 찾지만 지원되는 모든 기기를 찾아 사용자가 선택하도록 허용할 수도 있습니다.
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
}
}
자바
// 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;
}
}
통신 기기 설정
호환되는 기기를 찾으면 setCommunicationDevice
를 사용하여 라우팅할 기기를 설정합니다. 결과를 확인하면 오디오 관리자가 기기를 설정하려고 하는지 또는 오류가 발생했는지 앱에 알립니다.
Kotlin
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 오디오 기기가 설정되었으므로 전화를 걸 때 오디오 스트림의 오디오 라우팅이 올바르게 설정됩니다.
세션 종료
앱에서 통화 또는 세션을 완료하면 활성 통신 기기를 삭제합니다. 이렇게 하면 사용자가 여러 애플리케이션 간에 이동할 때 우수한 환경을 경험할 수 있습니다.
Kotlin
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice()
Java
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice();