Telecom API を使用して通話を管理する

このガイドでは、 Telecom API を呼び出し、サービス アカウントの接続を VoIP 通話。詳しくは、 通話アプリの作成ガイド 確認してから次に進みます。

ConnectionService を使用する および Connection クラスでは、 オーディオ状態、利用可能な Bluetooth デバイスのリスト、 選択した Bluetooth デバイスに音声を転送します。

VoIP 接続と ConnectionService

次のソースから拡張する VoIPConnection クラスを作成します。 Connection。このクラスは、現在の呼び出しの状態を制御します。 通話アプリの作成ガイド セルフマネージド アプリケーションにして、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() は、デバイスが Bluetooth、受話口、有線、または スピーカー。

mAudioState = connection.getCallAudioState()

状態の変更

次のメソッドをオーバーライドして、CallAudioState の変更を受け取る onCallAudioStateChanged()。 これにより、状態に変化があったことが通知されます。

Kotlin

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

Java

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

現在のデバイスを入手する

以下を使用して、現在アクティブなデバイスを取得する CallAudioState.getActiveBluetoothDevice()。 この関数は、アクティブな Bluetooth デバイスを返します。

Kotlin

val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()

Java

BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();

Bluetooth デバイスを入手する

以下を使用して、通話の音声ルーティングに使用できる Bluetooth デバイスのリストを取得します。 CallAudioState.getSupportedBluetoothDevices()

Kotlin

val availableBluetoothDevices: Collection =
  mAudioState.getSupportedBluetoothDevices()

Java

Collection availableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();

通話の音声をルーティングする

利用可能な Bluetooth デバイスに通話の音声をルーティングするには、 requestBluetoothAudio(BluetoothDevice):

requestBluetoothAudio(availableBluetoothDevices[0]);

API レベル 23 以降の使用

有効にする ROUTE_BLUETOOTH デバイスを指定せずに setAudioRoute(int)。 Android 9 以降では、現在アクティブな Bluetooth デバイスにデフォルトでルーティングされます。

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);