คู่มือนี้ครอบคลุมวิธีกำหนดเส้นทางเสียงสำหรับอุปกรณ์บลูทูธโดยใช้ Telecom API และตั้งค่าการเชื่อมต่อสำหรับ โทร VoIP อ่าน คู่มือสร้างแอปการโทร ก่อนดำเนินการต่อ
โดยใช้ConnectionService
และ Connection
ชั้นเรียน คุณสามารถเข้าถึง
สถานะเสียงและรายการอุปกรณ์บลูทูธที่ใช้งานได้ และสามารถกำหนดเส้นทาง
เสียงไปยังอุปกรณ์บลูทูธที่เลือก
การเชื่อมต่อ VoIP และ ConnectionService
สร้างชั้นเรียน VoIPConnection
ที่มาจาก
Connection
ชั้นเรียนนี้จะควบคุมสถานะของการโทรปัจจุบัน ตามที่
คู่มือสร้างแอปการโทร
สถานะต่างๆ กำหนดให้แอปพลิเคชันนี้เป็นแอปพลิเคชันแบบจัดการด้วยตนเอง และตั้งค่าโหมดเสียงสำหรับ 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); } }
ถัดไป ให้แสดงอินสแตนซ์ของคลาสนี้ใน
ConnectionService
เมื่อ
มีสายเรียกเข้าหรือโทรออก
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(); } }
ตรวจสอบว่าไฟล์ Manifest ชี้ไปที่คลาส 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>
ด้วย Connection
ที่กำหนดเองเหล่านี้และ
ConnectionService
ชั้นเรียน คุณ
สามารถควบคุมอุปกรณ์และประเภทการกำหนดเส้นทางเสียงที่ต้องการใช้ระหว่าง
การโทร
ดูสถานะปัจจุบันของเสียง
หากต้องการรับสถานะปัจจุบันของเสียง โปรดโทร
getCallAudioState()
getCallAudioState()
ส่งคืนหากอุปกรณ์กำลังสตรีมโดยใช้บลูทูธ หูฟังโทรศัพท์ แบบใช้สาย หรือ
ลำโพง
mAudioState = connection.getCallAudioState()
เปลี่ยนสถานะเมื่อ
สมัครรับการเปลี่ยนแปลงใน CallAudioState โดยการลบล้าง
onCallAudioStateChanged()
การดำเนินการนี้จะแจ้งเตือนคุณหากมีการเปลี่ยนแปลงของรัฐ
Kotlin
fun onCallAudioStateChanged(audioState: CallAudioState) { mAudioState = audioState }
Java
@Override public void onCallAudioStateChanged(CallAudioState audioState) { mAudioState = audioState; }
รับอุปกรณ์เครื่องปัจจุบัน
รับอุปกรณ์ที่ใช้งานอยู่ในปัจจุบันโดยใช้
CallAudioState.getActiveBluetoothDevice()
ฟังก์ชันนี้จะส่งคืนอุปกรณ์บลูทูธที่ใช้งานอยู่
Kotlin
val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
Java
BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();
รับอุปกรณ์บลูทูธ
ดูรายการอุปกรณ์บลูทูธที่พร้อมใช้งานสำหรับการกำหนดเส้นทางเสียงการโทรโดยใช้
CallAudioState.getSupportedBluetoothDevices()
Kotlin
val availableBluetoothDevices: Collection= mAudioState.getSupportedBluetoothDevices()
Java
CollectionavailableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();
กำหนดเส้นทางเสียงการโทร
ใช้ API ระดับ 28 ขึ้นไป (แนะนำ)
กำหนดเส้นทางเสียงการโทรไปยังอุปกรณ์บลูทูธที่พร้อมใช้งานโดยใช้
requestBluetoothAudio(BluetoothDevice)
:
requestBluetoothAudio(availableBluetoothDevices[0]);
การใช้ API ระดับ 23 ขึ้นไป
เปิดใช้
ROUTE_BLUETOOTH
โดยไม่ระบุอุปกรณ์ที่ใช้
setAudioRoute(int)
การตั้งค่านี้จะกำหนดเส้นทางไปยังอุปกรณ์บลูทูธที่ใช้งานอยู่ในปัจจุบันใน Android 9 ขึ้นไป
setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);