오디오 관리자 자체 관리 통화 가이드

이 가이드에서는 오디오 및 청취 가능한 기기 상태를 자체적으로 관리하려는 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

통신 기기 설정

호환되는 기기를 찾으면 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 오디오 기기가 설정되었으므로 전화를 걸 때 오디오 스트림의 오디오 라우팅이 올바르게 설정됩니다.

세션 종료

앱에서 통화 또는 세션을 완료하면 활성 통신 기기를 삭제합니다. 이렇게 하면 사용자가 여러 애플리케이션 간에 이동할 때 우수한 환경을 경험할 수 있습니다.

KotlinJava

// Clear the selection, ready for next call
audioManager
.clearCommunicationDevice()

// Clear the selection, ready for next call
audioManager
.clearCommunicationDevice();