Mengelola panggilan menggunakan Telecom API

Panduan ini membahas cara merutekan audio untuk perangkat Bluetooth menggunakan Telecom API dan menyetel koneksi untuk Panggilan VoIP. Baca Panduan Membuat aplikasi panggilan sebelum melanjutkan.

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

Koneksi VoIP dan Layanan Koneksi

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

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

Berikutnya, tampilkan instance class ini di ConnectionService jika akan terjadi panggilan masuk atau keluar.

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 Connection dan kustom ini ConnectionService kelas, Anda dapat mengontrol perangkat dan jenis perutean audio yang ingin Anda gunakan selama panggilan telepon.

Mendapatkan status audio saat ini

Untuk mendapatkan status audio saat ini, panggil getCallAudioState() getCallAudioState() akan dikembalikan jika perangkat melakukan streaming menggunakan Bluetooth, Earphone, Berkabel, atau Pembicara.

mAudioState = connection.getCallAudioState()

Saat Status Diubah

Berlangganan perubahan di CallAudioState dengan mengganti onCallAudioStateChanged() Tindakan ini akan memberi tahu Anda tentang setiap perubahan 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 akan menampilkan perangkat Bluetooth yang aktif.

Kotlin

val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()

Java

BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();

Dapatkan perangkat Bluetooth

Dapatkan daftar perangkat Bluetooth yang tersedia untuk perutean 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 level API 23 dan yang lebih tinggi

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

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);