يوفر Android 9 واجهات برمجة تطبيقات لتحسين التوافق مع تطبيقات الاتصال الخارجية. تعتمد تطبيقات الاتصال الخارجية عادةً على واجهات برمجة تطبيقات الاتصال الهاتفي، مثل عملية البث PHONE_STATE، للتعايش مع المكالمات الهاتفية التي يتم إجراؤها عبر مشغّل شبكة الجوّال. نتيجةً لذلك، يجب أن تمنح تطبيقات الاتصال الخارجية الأولوية للمكالمات التي يتم إجراؤها عبر مشغّل شبكة الجوّال، وغالبًا ما تلجأ إلى رفض المكالمات الواردة في التطبيق بدون إشعار، أو إنهاء مكالمة جارية لإفساح المجال لمكالمة يتم إجراؤها عبر مشغّل شبكة الجوّال.
تتوافق واجهات برمجة التطبيقات في Android 9 مع سيناريوهات الاتصال المتزامن بين التطبيقات الخارجية والمكالمات التي يتم إجراؤها عبر مشغّل شبكة الجوّال. ويتيح ذلك، على سبيل المثال، تلقّي مكالمة خارجية واردة أثناء إجراء مكالمة عبر مشغّل شبكة الجوّال. يتحمّل الإطار مسؤولية ضمان بقاء المكالمة التي يتم إجراؤها عبر مشغّل شبكة الجوّال قيد الانتظار عندما يجري المستخدم مكالمة خارجية.
في Android 9، ننصح تطبيقات الاتصال الخارجية بتنفيذ واجهة برمجة التطبيقات ConnectionService المُدارة ذاتيًا. لمزيد من المعلومات حول كيفية
إنشاء تطبيق اتصال باستخدام واجهة برمجة التطبيقات هذه، يُرجى الاطّلاع على مقالة
إنشاء تطبيق اتصال.
تمنح واجهة برمجة التطبيقات المُدارة ذاتيًا ConnectionService المطوّرين أيضًا فرصة
للموافقة على تسجيل المكالمات في تطبيقاتهم في سجلّ المكالمات في النظام (راجِع
EXTRA_LOG_SELF_MANAGED_CALLS).
وفقًا للمتطلبات الواردة في
مستند تعريف التوافق مع Android (CDD)
(القسم 7.4.1.2)، عليك التأكّد من أنّ تطبيق الاتصال أو تطبيق الهاتف يعرضان إدخالات سجلّ المكالمات هذه ويُظهران اسم تطبيق الاتصال الخارجي الذي تم إجراء المكالمة منه (للاطّلاع على مثال حول كيفية استيفاء تطبيق الاتصال في مشروع Android مفتوح المصدر (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).
يعني ذلك أنّه من الممكن أن تتضمّن سجلّ المكالمات إدخالات لا تكون للمكالمات على
شبكة الجوّال.
عندما يعرض تطبيق الاتصال في مشروع Android مفتوح المصدر (AOSP) إدخالات سجلّ المكالمات ذات الصلة بتطبيق اتصال خارجي، يظهر اسم التطبيق الذي تم إجراء المكالمة فيه في سجلّ المكالمات، كما هو موضّح في الشكل:
الشكل 2: إدخال في سجلّ المكالمات مع اسم تطبيق الاتصال الخارجي في تطبيق الاتصال
لتحديد اسم تطبيق مرتبط بإدخال في سجلّ المكالمات، استخدِم العمودَين
PHONE_ACCOUNT_COMPONENT_NAME
و
PHONE_ACCOUNT_ID
في مقدّم خدمة سجلّ المكالمات لإنشاء مثيل من
PhoneAccountHandle،
الذي يحدّد مصدر إدخال في سجلّ المكالمات. استخدِم طلب بحث في
TelecomManager
للحصول على تفاصيل PhoneAccount.
لتحديد ما إذا كان إدخال سجلّ المكالمات من تطبيق اتصال خارجي، تحقَّق من
PhoneAccount إمكانات
لمعرفة ما إذا تم ضبط
CAPABILITY_SELF_MANAGED.
تعرض طريقة
getLabel
في PhoneAccount الذي تم إرجاعه اسم التطبيق المرتبط
بإدخال في سجلّ المكالمات من تطبيق الاتصال الخارجي.
التحقق من صحة البيانات
لاختبار ما إذا كان جهازك يتيح استخدام تطبيقات الاتصال الخارجية، استخدِم تطبيق اختبار Telecomm الذي ينفّذ واجهة برمجة التطبيقات ConnectionService المُدارة ذاتيًا. يقع
التطبيق في
/packages/services/Telecomm/testapps/.
أنشِئ تطبيق الاختبار من جذر مستودع مصدر Android باستخدام الأمر التالي:
mmma packages/services/Telecomm/testapps/ثبِّت ملف APK الذي تم إنشاؤه باستخدام
adb install -g -r <apk path>. بعد ذلك، تتم إضافة رمز تطبيق "نموذج مُدار ذاتيًا" إلى مشغّل التطبيقات.انقر على الرمز لفتح تطبيق الاختبار.
التعامل مع المكالمات الواردة التي تؤدي إلى قطع مكالمة جارية
اتّبِع الخطوات التالية للتحقّق من أنّ المكالمة الواردة تؤدي إلى قطع مكالمة خارجية جارية.
الشكل 3: تطبيق الاختبار مع نماذج عمليات تنفيذ واجهة برمجة التطبيقات ConnectionService
- ألغِ تحديد الخيار يمكن وضعها قيد الانتظار.
- انقر على مكالمة صادرة لبدء مكالمة صادرة جديدة نموذجية.
- انقر على الزر نشطة لجعل المكالمة نشطة.
- اتّصِل برقم هاتف الجهاز قيد الاختبار باستخدام هاتف آخر. يؤدي ذلك إلى تفعيل السيناريو الذي يتم فيه تزويد تطبيق الاتصال باسم تطبيق سيتم قطع مكالمته.
- عند الانتهاء، انقر على الزر قطع الاتصال في تطبيق الاختبار.
إدخالات سجلّ المكالمات من تطبيقات الاتصال الخارجية
بعد إكمال الخطوات أعلاه، من المفترض أن يكون تطبيق الاختبار قد سجّل مكالمة في سجلّ المكالمات في النظام. للتأكّد من أنّ الجهاز يسجّل المكالمات من تطبيقات الاتصال الخارجية، افتح تطبيق الاتصال وتأكَّد من ظهور المكالمة في سجلّ المكالمات في النظام.