دعم تطبيقات الاتصال التابعة لجهات خارجية

يقدّم نظام Android 9 واجهات برمجة تطبيقات لدعم تطبيقات مكالمات الوسائط التابعة لجهات خارجية بشكل أفضل. تعتمد تطبيقات الاتصال التابعة لجهات خارجية عادةً على واجهات برمجة تطبيقات الاتصال الهاتفي، مثل بث PHONE_STATE، كي تتمكّن من العمل جنبًا إلى جنب مع مكالمات شبكة الجوّال. نتيجةً لذلك، يجب أن تمنح تطبيقات الاتصال التابعة لجهات خارجية الأولوية لمكالمات مشغّل شبكة الجوّال، وغالبًا ما تتم اللجوء إلى رفض المكالمات الواردة في التطبيق بصمت أو إنهاء مكالمة جارية لإفساح المجال لمكالمة مشغّل شبكة الجوّال.

تتيح واجهات برمجة التطبيقات في Android 9 سيناريوهات الاتصال المتزامن بين التطبيقات التابعة لجهات خارجية ومكالمات مشغّل شبكة الجوّال. يتيح ذلك، مثلاً، تلقّي مكالمة واردة من جهة خارجية أثناء إجراء مكالمة مع مشغّل شبكة الجوّال. يتحمّل إطار العمل مسؤولية ضمان تعليق مكالمة مشغّل شبكة الجوّال عندما يبدأ المستخدم مكالمة مع جهة خارجية.

في Android 9، ننصح باستخدام واجهة برمجة التطبيقات ConnectionService المُدارة ذاتيًا في تطبيقات الاتصال التابعة لجهات خارجية. لمزيد من المعلومات حول كيفية إنشاء تطبيق اتصال باستخدام واجهة برمجة التطبيقات هذه، يُرجى الاطّلاع على مقالة إنشاء تطبيق اتصال.

وتتيح واجهة برمجة التطبيقات ConnectionService المُدارة ذاتيًا للمطوّرين أيضًا الموافقة على تلقّي المكالمات في تطبيقاتهم عند تسجيل الدخول إلى سجلّ المكالمات الخاص بالنظام (راجِع EXTRA_LOG_SELF_MANAGED_CALLS). وفقًا للمتطلبات الواردة في مستند تعريف التوافق مع Android (CDD) (القسم 7.4.1.2)، عليك التأكّد من أنّ برنامج الاتصال أو تطبيق الهاتف يعرض إدخالات سجلّ المكالمات هذه ويعرض اسم تطبيق الاتصال الذي يتطلّبه التطبيق التابع لجهة خارجية (للاطّلاع على مثال على نموذج الاتصال الذي يرِد في التطبيق.

تتحمّل التطبيقات مسؤولية ضبط علامتَي CAPABILITY_SUPPORT_HOLD و CAPABILITY_HOLD في عمليات اتصالها. ومع ذلك، من الممكن أن يتعذّر على التطبيق إجراء مكالمة في بعض الحالات. يتضمّن الإطار القانوني أحكامًا لحلّ هذه الأنواع من الحالات.

السيناريوهات

عليك تعديل تطبيق الاتصال للتعامل مع السيناريوهات التالية:

معالجة المكالمات الواردة التي تؤدي إلى إنهاء مكالمة جارية

في السيناريو الذي تكون فيه مكالمة خارجية جارية (مثل مكالمة SuperCaller) لا تتيح وضع المكالمة في انتظار، ويتلقّى المستخدم مكالمة على شبكة الجوّال (على سبيل المثال، باستخدام مشغّل شبكة الجوّال FooCom)، يجب أن يشير تطبيق "الهاتف" أو تطبيق "أداة الاتصال" إلى المستخدم بأنّ الردّ على مكالمة شبكة الجوّال سيؤدي إلى إنهاء المكالمة الخارجية الجارية.

هذه التجربة مهمة للمستخدم لأنّ تطبيق الاتصال التابع لجهة خارجية قد يكون لديه مكالمة جارية لا يمكن للإطار الأساسي تعليقها. يؤدي الرد على مكالمة جديدة على الجهاز الجوّال إلى قطع الاتصال بالمكالمة الجارية مع جهة خارجية.

يمكنك الاطّلاع على واجهة المستخدم في الشكل أدناه كمثال:

مكالمة واردة تؤدي إلى إنهاء مكالمة جارية مع جهة خارجية

الشكل 1: مكالمة واردة تؤدي إلى إنهاء مكالمة جارية مع جهة خارجية

يمكن لتطبيق الاتصال التحقّق مما إذا كانت المكالمة الواردة تؤدي إلى إنهاء مكالمة أخرى من خلال التحقّق من إضافات الاتصال. يُرجى التأكّد من ضبط قيمة EXTRA_ANSWERING_DROPS_FG_CALL على TRUE، وضبط EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME على اسم التطبيق الذي تنقطع مكالمته عند الردّ على مكالمة الجوّال الواردة.

إدخالات سجلّ المكالمات من تطبيقات الاتصال التابعة لجهات خارجية

يمكن لمطوّري تطبيقات الاتصال التابعة لجهات خارجية تفعيل تسجيل المكالمات في تطبيقاتهم في سجلّ مكالمات النظام (راجِع EXTRA_LOG_SELF_MANAGED_CALLS). ويعني ذلك أنّه من الممكن أن تتضمّن سجلّ المكالمات إدخالات ليست متعلقة مكالمات شبكة الجوّال.

عندما يعرض تطبيق AOSP Dialer إدخالات سجلّ المكالمات المرتبطة بتطبيق مكالمات تابع لجهة خارجية، يتم عرض اسم التطبيق الذي تم إجراء المكالمة من خلاله في سجلّ المكالمات، كما هو موضّح في الشكل:

إدخال في سجلّ المكالمات باستخدام تطبيق اتصال تابع لجهة خارجية

الشكل 2. إدخال في سجلّ المكالمات يتضمّن اسم تطبيق اتصال تابع لجهة خارجية في تطبيق "أداة الاتصال"

لتحديد اسم تطبيق مرتبط بأحد إدخالات سجلّ المكالمات، استخدِم عمودَي PHONE_ACCOUNT_COMPONENT_NAME و PHONE_ACCOUNT_ID في مقدّم سجلّ المكالمات لإنشاء مثيل لجدول PhoneAccountHandle، الذي يحدِّد مصدر إدخال سجلّ المكالمات. اطلب TelecomManager للاطّلاع على تفاصيل PhoneAccount.
لتحديد ما إذا كان إدخال سجلّ المكالمات من تطبيق اتصال تابع لجهة خارجية، تحقَّق من إمكانات PhoneAccount لمعرفة ما إذا كان CAPABILITY_SELF_MANAGED مُعدًّا.

تعرض طريقة getLabel العنصر PhoneAccount المعروض اسم التطبيق المرتبط بأحد إدخالات سجلّ المكالمات من تطبيق الاتصال التابع لجهة خارجية.

التحقُّق

لاختبار ما إذا كان جهازك متوافقًا مع تطبيقات الاتصال التابعة لجهات خارجية، استخدِم تطبيق اختبار الاتصالات الذي ينفِّذ واجهة برمجة التطبيقات ConnectionService API المُدارة ذاتيًا. يقع التطبيق في /packages/services/Telecomm/testapps/.

  1. يمكنك إنشاء التطبيق التجريبي من جذر مستودع مصدر Android باستخدام:

    mmma packages/services/Telecomm/testapps/

  2. ثبِّت حزمة APK للإصدار باستخدام "adb install -g -r <apk path>". تتم بعد ذلك إضافة رمز نموذج مُدار ذاتيًا إلى مشغّل التطبيقات.

  3. انقر على الرمز لفتح التطبيق التجريبي.

معالجة المكالمات الواردة التي تؤدي إلى إنهاء مكالمة جارية

اتبع هذه الخطوات للتحقق من أن المكالمة الواردة تؤدي إلى إنهاء مكالمة جارية تابعة لجهة خارجية.

اختبار تطبيق تطبيقات الاتصال التابعة لجهات خارجية

الشكل 3: اختبِر التطبيق باستخدام نموذج من عمليات تنفيذ واجهة برمجة التطبيقات ConnectionService API.

  1. أزِل العلامة من المربّع بجانب الخيار قابل للتعليق.
  2. انقر على مكالمة صادرة لبدء نموذج مكالمة صادرة جديد.
  3. انقر على الزر نشط لتفعيل المكالمة.
  4. اتصل برقم هاتف الجهاز الذي يتم اختباره باستخدام هاتف آخر. يؤدي ذلك إلى تنفيذ السيناريو الذي يتم فيه تزويد تطبيق الاتصال باسم تطبيق، وسيتم إنهاء مكالمته.
  5. بعد الانتهاء، انقر على الزر إلغاء الربط في التطبيق الاختباري.

إدخالات سجلّ المكالمات من تطبيقات الاتصال التابعة لجهات خارجية

بعد إكمال الخطوات أعلاه، من المفترض أن يكون التطبيق التجريبي قد سجّل مكالمة في ملف سجلّ مكالمات النظام. للتأكّد من أنّ الجهاز يسجِّل المكالمات الواردة من تطبيقات الاتصال التابعة لجهات خارجية، افتح تطبيق الاتصال وتأكَّد من ظهور المكالمة في سجلّ مكالمات النظام.