Mengelola panggilan menggunakan Telecom API

Panduan ini membahas cara merutekan audio untuk perangkat Bluetooth menggunakan Telecom API dan menetapkan koneksi untuk panggilan VoIP. Baca panduan Mem-build aplikasi panggilan sebelum melanjutkan.

Dengan menggunakan class ConnectionService dan Connection, Anda dapat mengakses status audio dan daftar perangkat Bluetooth yang tersedia, serta dapat mengarahkan audio ke perangkat Bluetooth yang dipilih.

Koneksi dan ConnectionService VoIP

Buat class VoIPConnection yang diperluas dari Connection. Class ini mengontrol status panggilan saat ini. Sebagai status panduan Membuat aplikasi panggilan, jadikan aplikasi ini dikelola sendiri dan setel mode audio untuk aplikasi VIP.

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

Selanjutnya, tampilkan instance class ini di ConnectionService saat panggilan masuk atau keluar terjadi.

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

Pastikan manifes mengarah dengan benar ke class 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>

Dengan class Connection dan ConnectionService kustom ini, Anda dapat mengontrol perangkat dan jenis pemilihan rute audio yang ingin digunakan selama panggilan.

Mendapatkan status audio saat ini

Untuk mendapatkan status audio saat ini, panggil getCallAudioState(). getCallAudioState() ditampilkan jika perangkat sedang streaming menggunakan Bluetooth, Earpiece, Wired, atau Speaker.

mAudioState = connection.getCallAudioState()

Saat Status Diubah

Berlangganan perubahan di CallAudioState dengan mengganti onCallAudioStateChanged(). Hal ini akan memberi tahu Anda jika ada perubahan pada status.

Kotlin

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

Java

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

Mendapatkan perangkat saat ini

Dapatkan perangkat yang aktif saat ini menggunakan CallAudioState.getActiveBluetoothDevice(). Fungsi ini menampilkan perangkat Bluetooth aktif.

Kotlin

val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()

Java

BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();

Dapatkan perangkat Bluetooth

Dapatkan daftar perangkat Bluetooth yang tersedia untuk pemilihan rute audio panggilan menggunakan CallAudioState.getSupportedBluetoothDevices().

Kotlin

val availableBluetoothDevices: Collection =
  mAudioState.getSupportedBluetoothDevices()

Java

Collection availableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();

Merutekan audio panggilan

Rutekan audio panggilan ke perangkat Bluetooth yang tersedia menggunakan requestBluetoothAudio(BluetoothDevice):

requestBluetoothAudio(availableBluetoothDevices[0]);

Menggunakan API level 23 dan yang lebih tinggi

Aktifkan ROUTE_BLUETOOTH tanpa menentukan perangkat menggunakan setAudioRoute(int). Pemilihan rute default ini dilakukan ke perangkat Bluetooth yang aktif saat ini di Android 9 dan yang lebih baru.

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);