Telecom API를 사용하여 통화 관리

이 가이드에서는 다음을 사용하여 블루투스 기기에 오디오를 라우팅하는 방법을 설명합니다. Telecom API로 이동하고 VoIP 통화 자세한 내용은 통화 앱 빌드 가이드 를 선택합니다.

ConnectionService 사용 및 Connection 수업에서는 오디오 상태와 사용 가능한 블루투스 기기 목록을 생성하고 선택한 블루투스 기기로 오디오를 전송합니다.

VoIP 연결 및 ConnectionService

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

Kotlin

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

자바

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()
  }
}

자바

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()

On State 변경됨

재정의를 통해 CallAudioState 변경사항 구독 onCallAudioStateChanged() 상태가 변경되면 알립니다.

Kotlin

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

자바

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

현재 기기 가져오기

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

Kotlin

val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()

자바

BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();

블루투스 기기 가져오기

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

Kotlin

val availableBluetoothDevices: Collection =
  mAudioState.getSupportedBluetoothDevices()

자바

Collection availableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();

통화 오디오 라우팅

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

requestBluetoothAudio(availableBluetoothDevices[0]);

API 수준 23 이상 사용

사용 ROUTE_BLUETOOTH 드림 명령어를 사용하여 setAudioRoute(int) 이는 기본적으로 Android 9 이상에서 현재 활성 상태인 블루투스 기기로 라우팅됩니다.

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);