Hướng dẫn này trình bày cách định tuyến âm thanh cho thiết bị Bluetooth bằng API viễn thông và thiết lập kết nối cho Cuộc gọi VoIP. Đọc Hướng dẫn Tạo ứng dụng gọi điện trước khi tiếp tục.
Bằng cách sử dụng ConnectionService
và Connection
lớp, bạn có thể truy cập
trạng thái âm thanh và danh sách thiết bị Bluetooth hiện có, cũng như có thể định tuyến
âm thanh đến thiết bị Bluetooth đã chọn.
Dịch vụ kết nối và kết nối VoIP
Tạo lớp VoIPConnection
mở rộng từ
Connection
. Lớp này kiểm soát trạng thái của lệnh gọi hiện tại. Là
Hướng dẫn Tạo ứng dụng gọi điện
trạng thái, đặt ứng dụng này thành ứng dụng tự quản lý và đặt chế độ âm thanh cho 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); } }
Tiếp theo, hãy trả về một thực thể của lớp này trong
ConnectionService
khi một
cuộc gọi đến hoặc đi sẽ diễn ra.
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(); } }
Đảm bảo tệp kê khai trỏ chính xác đến lớp 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>
Với các Connection
tuỳ chỉnh này và
ConnectionService
lớp, bạn
có thể kiểm soát thiết bị và loại định tuyến âm thanh mà bạn muốn sử dụng trong một
.
Xem trạng thái âm thanh hiện tại
Để biết trạng thái âm thanh hiện tại, hãy gọi
getCallAudioState()
.
getCallAudioState()
sẽ trả lại nếu thiết bị đang truyền trực tuyến qua Bluetooth, Tai nghe, Có dây hoặc
Loa.
mAudioState = connection.getCallAudioState()
Khi trạng thái đã thay đổi
Đăng ký các thay đổi trong CallAudioState bằng cách ghi đè
onCallAudioStateChanged()
.
Thao tác này sẽ cảnh báo bạn về bất kỳ thay đổi nào đối với trạng thái.
Kotlin
fun onCallAudioStateChanged(audioState: CallAudioState) { mAudioState = audioState }
Java
@Override public void onCallAudioStateChanged(CallAudioState audioState) { mAudioState = audioState; }
Tải thiết bị hiện tại
Tải thiết bị hiện đang hoạt động bằng
CallAudioState.getActiveBluetoothDevice()
.
Hàm này trả về thiết bị Bluetooth đang hoạt động.
Kotlin
val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
Java
BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();
Tải thiết bị Bluetooth
Lấy danh sách thiết bị Bluetooth có thể định tuyến âm thanh cuộc gọi bằng
CallAudioState.getSupportedBluetoothDevices()
.
Kotlin
val availableBluetoothDevices: Collection= mAudioState.getSupportedBluetoothDevices()
Java
CollectionavailableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();
Định tuyến âm thanh cuộc gọi
Sử dụng API cấp 28 trở lên (nên dùng)
Định tuyến âm thanh cuộc gọi đến một thiết bị Bluetooth có sẵn bằng cách sử dụng
requestBluetoothAudio(BluetoothDevice)
:
requestBluetoothAudio(availableBluetoothDevices[0]);
Sử dụng API cấp 23 trở lên
Bật
ROUTE_BLUETOOTH
mà không chỉ định thiết bị bằng cách sử dụng
setAudioRoute(int)
.
Chế độ này mặc định định tuyến thành các thiết bị Bluetooth hiện đang hoạt động trên Android 9 trở lên.
setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);