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

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

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

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

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

تتحمّل التطبيقات مسؤولية ضبط 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 إدخالات سجلّ المكالمات ذات الصلة بتطبيق اتصال تابع لجهة خارجية، يظهر اسم التطبيق الذي تم إجراء المكالمة من خلاله في سجلّ المكالمات، كما هو موضّح في الشكل:

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

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

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

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

التحقُّق

لاختبار ما إذا كان جهازك يتيح استخدام تطبيقات الاتصال التابعة لجهات خارجية، استخدِم تطبيق Telecomm test الذي ينفّذ واجهة برمجة التطبيقات ConnectionService المُدارة ذاتيًا. يقع التطبيق في /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. عند الانتهاء، انقر على الزر إلغاء الربط في تطبيق الاختبار.

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

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