Panduan panggilan yang dikelola sendiri oleh Pengelola Audio

Panduan ini membahas aplikasi komunikasi, seperti Voice over Internet Protocol (VoIP), yang ingin mengelola sendiri status audio dan perangkat yang dapat didengar.

Daftarkan callback audio

Pertama, buat AudioDeviceCallback, yang akan memberi tahu aplikasi Anda saat perangkat audio terhubung atau terputus dari perangkat.

Kotlin

val audioDeviceCallback: AudioDeviceCallback = object : AudioDeviceCallback() {
  override fun onAudioDevicesAdded(addedDevices: Array) {}
  override fun onAudioDevicesRemoved(removedDevices: Array) {}
}

audioManager.registerAudioDeviceCallback(audioDeviceCallback)

Java

final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() {
  @Override
  public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
  }

  @Override
  public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) {
    // Handle device removal
  }
};

audioManager.registerAudioDeviceCallback(audioDeviceCallback);

Periksa perangkat komunikasi yang aktif

Pengelola audio akan memberi tahu Anda perangkat komunikasi mana yang sedang aktif.

Kotlin

val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice

Java

AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();

Memproses saat perangkat komunikasi telah berubah akan memberi tahu aplikasi Anda saat perutean diterapkan dan perangkat yang Anda pilih aktif.

Kotlin

val listener =
  OnCommunicationDeviceChangedListener { device -> // Handle changes
    currentCommunicationDevice = device
  }
audioManager.addOnCommunicationDeviceChangedListener(executor, listener)

Java

AudioManager.OnCommunicationDeviceChangedListener listener = 
      new AudioManager.OnCommunicationDeviceChangedListener() {
  @Override
  void onCommunicationDeviceChanged(AudioDeviceInfo device) {
      // Handle changes
      currentCommunicationDevice = device;
  }
};
AudioManager.addOnCommunicationDeviceChangedListener(executor, listener);

Mencari perangkat audio BLE

Gunakan getAvailableCommuncationDevices() untuk melihat perangkat yang tersedia untuk panggilan VoIP. Gunakan AudioDeviceInfo untuk melihat apakah perangkat adalah headset BLE. Contoh ini mencari perangkat pertama yang mendukung Audio BLE, tetapi Anda juga dapat mempertimbangkan untuk menemukan semua perangkat yang didukung dan memungkinkan pengguna untuk memilih.

Kotlin


// Get list of currently available devices
val devices = audioManager.availableCommunicationDevices

// User choose one of the devices, let's say, TYPE_BLE_HEADSET
val userSelectedDeviceType = AudioDeviceInfo.TYPE_BLE_HEADSET

//for the device from the list
var selectedDevice: AudioDeviceInfo? = null
for (device in devices) {
  if (device.type == userSelectedDeviceType) {
    selectedDevice = device
    break
  }
}

Java


// Get list of currently available devices
List devices = audioManager.getAvailableCommunicationDevices();

// User choose one of the devices, for example, TYPE_BLE_HEADSET
int userSelectedDeviceType = AudioDeviceInfo.TYPE_BLE_HEADSET;

// Filter for the device from the list
AudioDeviceInfo selectedDevice = null;
for (AudioDeviceInfo device : devices) {
    if (device.getType() == userSelectedDeviceType) {
        selectedDevice = device;
        break;
    }
}

Setel perangkat komunikasi

Setelah menemukan perangkat yang kompatibel, gunakan setCommunicationDevice untuk menetapkan perangkat yang ingin dirutekan. Memeriksa hasilnya akan memberi tahu aplikasi Anda jika pengelola audio mencoba menyetel perangkat atau jika mengalami error.

Kotlin


val result = audioManager.setCommunicationDevice(selectedDevice)
if (!result) {
  // Handle error.
}
// Wait for currentCommunicationDevice to become selectedDevice with a timeout (e.g. 30s)

Java


boolean result = audioManager.setCommunicationDevice(selectedDevice);
if (!result) {
  // Handle error.
}
// Wait for currentCommunicationDevice to become selectedDevice with a timeout (e.g. 30s)

Setelah perangkat BLE Audio disetel, streaming audio akan memiliki pemilihan rute audio yang benar saat melakukan panggilan.

Akhiri sesi

Setelah aplikasi menyelesaikan panggilan atau sesi, hapus perangkat komunikasi yang aktif. Hal ini membantu memastikan pengguna memiliki pengalaman yang baik saat berpindah antar aplikasi yang berbeda.

Kotlin


// Clear the selection, ready for next call
audioManager.clearCommunicationDevice()

Java


// Clear the selection, ready for next call
audioManager.clearCommunicationDevice();