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

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

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

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

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

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

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

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

التعامل مع المكالمات الواردة التي تقطع مكالمة جارية

في السيناريو الذي توجد فيه مكالمة 3P مستمرة (على سبيل المثال، في مكالمة SuperCaller) لا تدعم التعليق، ويتلقى المستخدم مكالمة هاتفية (على سبيل المثال عبر شركة الاتصالات FooCom)، يجب أن يشير تطبيق Dialer/Phone الخاص بك إلى المستخدم الذي يقوم بالرد ستؤدي مكالمة شبكة الهاتف المحمول إلى إنهاء مكالمة 3P الجارية.

تعد تجربة المستخدم هذه مهمة نظرًا لأن تطبيق الاتصال 3P قد يكون به مكالمة مستمرة لا يمكن لإطار العمل إجراؤها. يؤدي الرد على مكالمة هاتف محمول جديدة إلى قطع اتصال 3P الجاري.

انظر واجهة المستخدم أدناه للحصول على مثال:

مكالمة واردة تفصل مكالمة 3P الجارية
الشكل 1. مكالمة واردة تؤدي إلى قطع اتصال مكالمة 3P الجارية

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

إدخالات سجل المكالمات من تطبيقات الاتصال 3P

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

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

إدخال سجل المكالمات مع تطبيق الاتصال 3P
الشكل 2. إدخال سجل المكالمات باسم تطبيق الاتصال 3P على تطبيق Dialer

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

تقوم طريقة getLabel الخاصة بـ PhoneAccount الذي تم إرجاعه بإرجاع اسم التطبيق المرتبط بإدخال سجل المكالمات من تطبيق الاتصال 3P.

تصديق

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

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

    mmma packages/services/Telecomm/testapps/

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

  3. اضغط على الأيقونة لفتح تطبيق الاختبار.

التعامل مع المكالمات الواردة التي تقطع مكالمة جارية

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

تطبيق تجريبي لتطبيقات الاتصال 3P
الشكل 3. اختبار التطبيق باستخدام نماذج تطبيقات واجهة برمجة تطبيقات ConnectionService المُدارة ذاتيًا
  1. قم بإلغاء تحديد خيار Holdable .
  2. اضغط على OUTGOING لبدء نموذج جديد للمكالمة الصادرة.
  3. اضغط على الزر "نشط" لتنشيط المكالمة.
  4. اتصل برقم هاتف الجهاز قيد الاختبار بهاتف آخر. يؤدي هذا إلى استدعاء السيناريو حيث يتم تزويد برنامج الاتصال الخاص بك باسم التطبيق، والذي سيتم قطع اتصاله به.
  5. عند الانتهاء، اضغط على زر قطع الاتصال في تطبيق الاختبار.

إدخالات سجل المكالمات من تطبيقات الاتصال 3P

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