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

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

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

اتصال VoIP و ConnectionService

یک کلاس VoIPConnection ایجاد کنید که از Connection گسترش می یابد. این کلاس وضعیت تماس فعلی را کنترل می کند. همانطور که راهنمای Build a calling app بیان می کند، این برنامه را به یک برنامه خود مدیریت تبدیل کنید و حالت صوتی را برای یک برنامه 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() برمی گردد اگر دستگاه با استفاده از بلوتوث، Earpiece، Wired یا Speaker در حال پخش جریانی باشد.

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]);

با استفاده از API سطح 23 و بالاتر

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

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);