Telecom API를 사용하여 통화 관리

이 가이드에서는 Telecom API를 사용하여 블루투스 기기의 오디오를 라우팅하고 VoIP 통화 연결을 설정하는 방법을 설명합니다. 계속하기 전에 통화 앱 빌드 가이드를 읽어보세요.

ConnectionServiceConnection 클래스를 사용하여 오디오 상태와 사용 가능한 블루투스 기기 목록에 액세스하고 선택한 블루투스 기기로 오디오를 라우팅할 수 있습니다.

VoIP 연결 및 ConnectionService

Connection에서 확장되는 VoIPConnection 클래스를 만듭니다. 이 클래스는 현재 호출의 상태를 제어합니다. 통화 앱 빌드 가이드에서 언급했듯이 이를 자체 관리형 애플리케이션으로 만들고 VoIP 애플리케이션의 오디오 모드를 설정합니다.

Kotlin

class VoIPConnection : Connection() {
  init {
    setConnectionProperties(PROPERTY_SELF_MANAGED)
    setAudioModeIsVoip(true)
  }
}

Java

public class VoIPConnection extends Connection {
  public VoIPConnection() {
    setConnectionProperties(PROPERTY_SELF_MANAGED);
    setAudioModeIsVoip(true);
  }
}

그런 다음 수신 전화 또는 발신 전화가 발생할 때 ConnectionService에서 이 클래스의 인스턴스를 반환합니다.

Kotlin

class VoIPConnectionService : ConnectionService() {
  override fun onCreateOutgoingConnection(
    connectionManagerPhoneAccount: PhoneAccountHandle,
    request: ConnectionRequest,
  ): Connection {
    return VoIPConnection()
  }
}

Java

public class VoIPConnectionService extends ConnectionService {
  @Override
  public Connection onCreateOutgoingConnection(PhoneAccountHandle connectionManagerPhoneAccount, ConnectionRequest request) {
    return new VoIPConnection();
  }
}

매니페스트가 VoIPConnectionService 클래스를 올바르게 가리키는지 확인합니다.

<service android:name=".voip.TelegramConnectionService" android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
  <intent-filter>
    <action android:name="android.telecom.ConnectionService"/>
  </intent-filter>
</service>

이러한 맞춤 ConnectionConnectionService 클래스를 사용하면 통화 중에 사용할 기기와 오디오 라우팅 유형을 제어할 수 있습니다.

현재 오디오 상태 가져오기

현재 오디오 상태를 가져오려면 getCallAudioState()를 호출합니다. getCallAudioState()는 기기가 블루투스, 이어폰, 유선 또는 스피커를 사용하여 스트리밍 중인 경우 반환됩니다.

mAudioState = connection.getCallAudioState()

켜기 상태가 변경됨

onCallAudioStateChanged()를 재정의하여 CallAudioState의 변경사항을 구독합니다. 상태가 변경되면 알려줍니다.

Kotlin

fun onCallAudioStateChanged(audioState: CallAudioState) {
  mAudioState = audioState
}

Java

@Override
public void onCallAudioStateChanged(CallAudioState audioState) {
  mAudioState = audioState;
}

현재 기기 가져오기

CallAudioState.getActiveBluetoothDevice()를 사용하여 현재 활성 기기를 가져옵니다. 이 함수는 활성 블루투스 기기를 반환합니다.

Kotlin

val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()

Java

BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();

블루투스 기기 구매

CallAudioState.getSupportedBluetoothDevices()를 사용하여 통화 오디오 라우팅에 사용할 수 있는 블루투스 기기 목록을 가져옵니다.

Kotlin

val availableBluetoothDevices: Collection =
  mAudioState.getSupportedBluetoothDevices()

Java

Collection availableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();

통화 오디오 라우트

requestBluetoothAudio(BluetoothDevice)를 사용하여 사용 가능한 블루투스 기기로 통화 오디오를 라우팅합니다.

requestBluetoothAudio(availableBluetoothDevices[0]);

API 수준 23 이상 사용

setAudioRoute(int)를 사용하여 기기를 지정하지 않고 ROUTE_BLUETOOTH를 사용 설정합니다. Android 9 이상에서 현재 활성화된 블루투스 기기로 기본 라우팅됩니다.

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);