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

يشمل هذا الدليل كيفية توجيه الصوت للأجهزة التي تتضمّن بلوتوث باستخدام Talecom 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();
  }
}

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