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

คู่มือนี้ครอบคลุมวิธีกำหนดเส้นทางเสียงสำหรับอุปกรณ์บลูทูธโดยใช้ 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

Collection availableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();

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

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

requestBluetoothAudio(availableBluetoothDevices[0]);

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

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

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);