إدارة المكالمات باستخدام واجهة برمجة التطبيقات Telecom

يتناول هذا الدليل كيفية توجيه الصوت لأجهزة البلوتوث باستخدام Telecom API وإعداد الاتصال مكالمات VoIP اطّلِع على دليل إنشاء تطبيقات للاتصال قبل المتابعة.

من خلال استخدام ConnectionService وConnection صفًا، يمكنك الوصول إليها حالة الصوت وقائمة بأجهزة البلوتوث المتاحة، ويمكنك توجيه الصوت إلى جهاز بلوتوث محدد.

اتصال VoIP وخدمة الاتصال

إنشاء صف 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();
  }
}

تأكَّد من أنّ البيان يشير بشكل صحيح إلى فئة 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]);

استخدام المستوى 23 من واجهة برمجة التطبيقات والمستويات الأعلى

تفعيل ROUTE_BLUETOOTH بدون تحديد الجهاز باستخدام setAudioRoute(int) يؤدي هذا الإعداد التلقائي إلى ضبط الإعدادات التلقائية على الأجهزة الحالية والنشطة التي تتضمّن بلوتوث على نظام التشغيل Android 9 والإصدارات الأحدث.

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);