จัดการการโทรโดยใช้ Telecom API

คู่มือนี้ครอบคลุมวิธีกำหนดเส้นทางเสียงสำหรับอุปกรณ์บลูทูธโดยใช้ Telecom API และตั้งค่าการเชื่อมต่อสำหรับ โทร VoIP อ่าน คู่มือสร้างแอปการโทร ก่อนดำเนินการต่อ

โดยใช้ConnectionService และ Connection ชั้นเรียน คุณสามารถเข้าถึง สถานะเสียงและรายการอุปกรณ์บลูทูธที่ใช้งานได้ และสามารถกำหนดเส้นทาง เสียงไปยังอุปกรณ์บลูทูธที่เลือก

การเชื่อมต่อ VoIP และ ConnectionService

สร้างชั้นเรียน VoIPConnection ที่มาจาก Connection ชั้นเรียนนี้จะควบคุมสถานะของการโทรปัจจุบัน ตามที่ คู่มือสร้างแอปการโทร สถานะต่างๆ กำหนดให้แอปพลิเคชันนี้เป็นแอปพลิเคชันแบบจัดการด้วยตนเอง และตั้งค่าโหมดเสียงสำหรับ VoIP แอปพลิเคชัน

KotlinJava
class VoIPConnection : Connection() {
 
init {
    setConnectionProperties
(PROPERTY_SELF_MANAGED)
    setAudioModeIsVoip
(true)
 
}
}
public class VoIPConnection extends Connection {
 
public VoIPConnection() {
    setConnectionProperties
(PROPERTY_SELF_MANAGED);
    setAudioModeIsVoip
(true);
 
}
}

ถัดไป ให้แสดงอินสแตนซ์ของคลาสนี้ใน ConnectionService เมื่อ มีสายเรียกเข้าหรือโทรออก

KotlinJava
class VoIPConnectionService : ConnectionService() {
 
override fun onCreateOutgoingConnection(
    connectionManagerPhoneAccount
: PhoneAccountHandle,
    request
: ConnectionRequest,
 
): Connection {
   
return VoIPConnection()
 
}
}
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() การดำเนินการนี้จะแจ้งเตือนคุณหากมีการเปลี่ยนแปลงของรัฐ

KotlinJava
fun onCallAudioStateChanged(audioState: CallAudioState) {
  mAudioState
= audioState
}
@Override
public void onCallAudioStateChanged(CallAudioState audioState) {
  mAudioState
= audioState;
}

รับอุปกรณ์เครื่องปัจจุบัน

รับอุปกรณ์ที่ใช้งานอยู่ในปัจจุบันโดยใช้ CallAudioState.getActiveBluetoothDevice() ฟังก์ชันนี้จะส่งคืนอุปกรณ์บลูทูธที่ใช้งานอยู่

KotlinJava
val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();

รับอุปกรณ์บลูทูธ

ดูรายการอุปกรณ์บลูทูธที่พร้อมใช้งานสำหรับการกำหนดเส้นทางเสียงการโทรโดยใช้ CallAudioState.getSupportedBluetoothDevices()

KotlinJava
val availableBluetoothDevices: Collection
Collection

กำหนดเส้นทางเสียงการโทร

กำหนดเส้นทางเสียงการโทรไปยังอุปกรณ์บลูทูธที่พร้อมใช้งานโดยใช้ requestBluetoothAudio(BluetoothDevice):

requestBluetoothAudio(availableBluetoothDevices[0]);

การใช้ API ระดับ 23 ขึ้นไป

เปิดใช้ ROUTE_BLUETOOTH โดยไม่ระบุอุปกรณ์ที่ใช้ setAudioRoute(int) การตั้งค่านี้จะกำหนดเส้นทางไปยังอุปกรณ์บลูทูธที่ใช้งานอยู่ในปัจจุบันใน Android 9 ขึ้นไป

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);