مدیریت تماس‌ها بااستفاده از Telecom API

این راهنما نحوه مسیریابی صدا برای دستگاه‌های بلوتوث بااستفاده از Telecom API و تنظیم اتصال برای تماس‌های VoIP را پوشش می‌دهد. قبل‌از ادامه دادن، راهنمای ساختن برنامه برقراری تماس را بخوانید.

بااستفاده از کلاس‌های ConnectionService و Connection، می‌توانید به وضعیت صدا و فهرستی از دستگاه‌های بلوتوث دردسترس دسترسی پیدا کنید و می‌توانید صدا را به دستگاه بلوتوث انتخابی هدایت کنید.

اتصال VoIP و ConnectionService

کلاس VoIPConnection ایجاد کنید که از Connection گسترش یابد. این کلاس وضعیت تماس فعلی را کنترل می‌کند. همان‌طور که در راهنمای ساختن برنامه برقراری تماس بیان شده است، این برنامه را به برنامه‌ای خودمدیریت تبدیل کنید و حالت صوتی را برای برنامه VoIP تنظیم کنید.

کاتلین

class VoIPConnection : Connection() {
  init {
    setConnectionProperties(PROPERTY_SELF_MANAGED)
    setAudioModeIsVoip(true)
  }
}

جاوا

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

سپس، وقتی تماس ورودی یا خروجی برقرار می‌شود، نمونه‌ای از این کلاس را در ConnectionService برگردانید.

کاتلین

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();
  }
}

مطمئن شوید مانیفست به‌درستی به کلاس 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()

هنگام تغییر وضعیت

با لغو کردن onCallAudioStateChanged()، در تغییرات CallAudioState مشترک شوید. این گزینه هرگونه تغییر در وضعیت را به شما هشدار می‌دهد.

کاتلین

fun onCallAudioStateChanged(audioState: CallAudioState) {
  mAudioState = audioState
}

جاوا

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

دریافت دستگاه فعلی

دریافت دستگاه فعال فعلی بااستفاده از CallAudioState.getActiveBluetoothDevice(). این تابع دستگاه بلوتوث فعال را برمی‌گرداند.

کاتلین

val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()

جاوا

BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();

دریافت دستگاه‌های بلوتوث

دریافت فهرست دستگاه‌های بلوتوثی که برای مسیریابی صدای تماس بااستفاده از CallAudioState.getSupportedBluetoothDevices() دردسترس هستند.

کاتلین

val availableBluetoothDevices: Collection =
  mAudioState.getSupportedBluetoothDevices()

جاوا

Collection availableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();

هدایت کردن صدای تماس

بااستفاده از requestBluetoothAudio(BluetoothDevice)، صدای تماس را به دستگاه بلوتوث دردسترس هدایت کنید:

requestBluetoothAudio(availableBluetoothDevices[0]);

استفاده از سطح میانای برنامه‌سازی کاربردی ۲۳ و بالاتر

ROUTE_BLUETOOTH را بدون مشخص کردن دستگاه بااستفاده از setAudioRoute(int) فعال کنید. این ویژگی به‌طور پیش‌فرض مسیریابی را به دستگاه‌های بلوتوث فعال فعلی در Android 9 و بالاتر هدایت می‌کند.

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);