إنشاء إشعار بنمط المكالمات لتطبيقات الاتصال

في الإصدار Android 12.0 (المستوى 31 من واجهة برمجة التطبيقات) والإصدارات الأحدث، يوفر النظام نموذج إشعار CallStyle للتمييز بين إشعارات المكالمات والأنواع الأخرى من الإشعارات. استخدم هذا القالب لإنشاء إشعارات المكالمات الواردة أو المستمرة. يدعم النموذج الإشعارات كبيرة الحجم التي تتضمن معلومات المتصل والإجراءات المطلوبة مثل الرد على المكالمات أو رفضها.

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

يتضمّن نموذج إشعارات CallStyle الإجراءات التالية المطلوبة:

  • الردّ أو الرفض للمكالمات الواردة
  • قطع الاتصال للمكالمات الجارية.
  • الردّ أو إنهاء المكالمة لفحص المكالمات

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

إشعارات أنماط المكالمات مع أزرار مصنَّفة
الشكل 1. نموذج CallStyle للمكالمات الواردة والجارية

يتم تمرير الإجراءات المطلوبة كأغراض، مثل hangupIntent وanswerIntent في الأقسام التالية. يعد كل منها إشارة إلى الرمز المميّز الذي يحتفظ به النظام. الرمز المميز هو كائن خفيف يمكن تمريره بين تطبيقات وعمليات مختلفة. ويكون النظام هو المسؤول عن إدارة فترة صلاحية الرمز المميّز والتأكّد من أنّ PendingIntent قابل للاستخدام حتى إذا لم يعُد التطبيق الذي أنشأته قيد التشغيل. عندما تمنح تطبيقًا آخر PendingIntent، يعني ذلك أنّك تمنحه الإذن لتنفيذ العملية المحدّدة، مثل الرفض أو الإجابة. ويتم منح هذا الإذن حتى إذا لم يكن التطبيق الذي أنشأ الغرض من التشغيل قيد التشغيل في الوقت الحالي. لمزيد من المعلومات، اطّلِع على المستندات المراجعة حول PendingIntent.

بدءًا من نظام التشغيل Android 14 (المستوى 34 لواجهة برمجة التطبيقات)، يمكنك ضبط إشعارات المكالمات لعدم إغلاقها. لإجراء ذلك، استخدِم إشعارات "CallStyle" من خلال عرض Notification.FLAG_ONGOING_EVENT حتى Notification.Builder#setOngoing(true).

في ما يلي أمثلة على استخدام طُرق مختلفة من خلال الإشعار CallStlye.

Kotlin

// Create a new call, setting the user as the caller.
val incomingCaller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Java

// Create a new call with the user as the caller.
Person incomingCaller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

مكالمة واردة

يمكنك استخدام طريقة forIncomingCall() لإنشاء إشعار نمط المكالمة لمكالمة واردة.

Kotlin

// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incomingCaller)

Java

// Create a call style notification for an incoming call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incomingCaller);

مكالمة جارية

استخدِم الطريقة forOngoingCall() لإنشاء إشعار بنمط المكالمة لمكالمة جارية.

Kotlin

// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forOngoingCall(caller, hangupIntent))
    .addPerson(second_caller)

Java

// Create a call style notification for an ongoing call.
Notification.Builder builder = new Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOngoingCall(caller, hangupIntent))
    .addPerson(second_caller);

فحص مكالمة

يمكنك استخدام طريقة forScreeningCall() لإنشاء إشعار بنمط المكالمة لفحص المكالمة.

Kotlin

// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller)

Java

// Create a call style notification for screening a call.
Notification.Builder builder = new Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

توفير التوافق عبر المزيد من إصدارات Android

يجب ربط إشعارات CallStyle على الإصدار 30 من واجهة برمجة التطبيقات أو الإصدارات الأقدم بخدمة تعمل في المقدّمة بهدف منحها الترتيب الأعلى في المستوى 31 من واجهة برمجة التطبيقات أو الإصدارات الأحدث. بالإضافة إلى ذلك، يمكن لإشعارات CallStyle على الإصدار 30 من واجهة برمجة التطبيقات أو الإصدارات الأقدم الحصول على ترتيب مشابه من خلال وضع علامة على الإشعار بأنّه ملوّن، وذلك باستخدام طريقة setColorized().

يمكنك استخدام واجهات برمجة تطبيقات Telecom مع إشعارات CallStyle. لمزيد من المعلومات، يُرجى الاطّلاع على نظرة عامة على إطار عمل الاتصالات الإلكترونية.