Hướng dẫn này đề cập đến những ứng dụng giao tiếp như Truyền giọng nói trên giao thức Internet (VoIP) muốn tự quản lý trạng thái âm thanh và trạng thái của thiết bị có thể nghe được.
Đăng ký lệnh gọi lại âm thanh
Trước tiên, hãy tạo một AudioDeviceCallback
để thông báo cho ứng dụng của bạn khi các thiết bị âm thanh kết nối hoặc ngắt kết nối khỏi thiết bị đó.
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);
Kiểm tra thiết bị giao tiếp đang hoạt động
Trình quản lý âm thanh cho bạn biết thiết bị giao tiếp nào hiện đang hoạt động.
Kotlin
val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice
Java
AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();
Lắng nghe thời điểm một thiết bị giao tiếp thay đổi để cho ứng dụng của bạn biết thời điểm áp dụng chế độ định tuyến và thiết bị bạn chọn đang hoạt động.
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);
Tìm thiết bị âm thanh BLE
Hãy dùng getAvailableCommuncationDevices()
để xem thiết bị nào hỗ trợ cuộc gọi VoIP. Sử dụng AudioDeviceInfo
để xem thiết bị có phải là tai nghe BLE hay không. Ví dụ này tìm thiết bị đầu tiên hỗ trợ Âm thanh BLE, nhưng bạn cũng có thể cân nhắc việc tìm tất cả thiết bị được hỗ trợ và cho phép người dùng lựa chọn.
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;
}
}
Đặt thiết bị liên lạc
Sau khi bạn tìm thấy một thiết bị tương thích, hãy dùng setCommunicationDevice
để đặt thiết bị mà bạn muốn chuyển đến. Việc kiểm tra kết quả sẽ thông báo cho ứng dụng của bạn biết liệu trình quản lý âm thanh có đang cố đặt thiết bị hay không hoặc thiết bị có gặp lỗi hay không.
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)
Hiện tại, thiết bị Âm thanh BLE đã được thiết lập, nên khi bạn gọi điện, luồng âm thanh sẽ có chế độ định tuyến âm thanh chính xác.
Kết thúc phiên
Sau khi ứng dụng của bạn kết thúc một cuộc gọi hoặc phiên, hãy xoá thiết bị giao tiếp đang hoạt động. Điều này giúp đảm bảo người dùng có trải nghiệm tốt khi di chuyển giữa các ứng dụng.
Kotlin
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice()
Java
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice();