使用 Telecom API 管理通話

本指南將說明如何使用 Telecom API,並為 IP 網路語音傳遞技術通話。閱讀 「建構通話應用程式」指南 才能繼續。

使用 ConnectionServiceConnection 門課程,您可以存取 音訊狀態以及可用藍牙裝置的清單, 音訊上傳到指定的藍牙裝置。

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()敬上 會在裝置使用藍牙、耳機、有線或 喇叭。

mAudioState = connection.getCallAudioState()

開啟狀態已變更

透過覆寫來訂閱 CallAudioState 變更 onCallAudioStateChanged()。 一旦狀態有任何變更,就會通知您。

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 及以上級別

啟用 ROUTE_BLUETOOTH敬上 不必指定裝置 setAudioRoute(int)。 根據預設,系統會為搭載 Android 9 以上版本的目前使用中的藍牙裝置提供預設路徑。

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);