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

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

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

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

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

تتحمّل التطبيقات مسؤولية ضبط 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. عند الانتهاء، انقر على الزر إلغاء الربط في تطبيق الاختبار.

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

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