إنشاء إشعار قابل للتوسيع

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

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

إضافة صورة كبيرة

لإضافة صورة في إشعارك، مرِّر مثيلاً من NotificationCompat.BigPictureStyle إلى setStyle().

  val notification = NotificationCompat.Builder(context, CHANNEL_ID)
          .setSmallIcon(R.drawable.new_post)
          .setContentTitle(imageTitle)
          .setContentText(imageDescription)
          .setStyle(NotificationCompat.BigPictureStyle()
                  .bigPicture(myBitmap))
          .build()

لجعل الصورة تظهر كصورة مصغّرة فقط أثناء تصغير الإشعار، كما هو موضّح في الشكل التالي، استدعِ الدالة setLargeIcon() ومرِّر إليها الصورة. بعد ذلك، استدعِ الدالة BigPictureStyle.bigLargeIcon() ومرِّر إليها null حتى تختفي الصورة الكبيرة عند توسيع الإشعار:

  val notification = NotificationCompat.Builder(context, CHANNEL_ID)
          .setSmallIcon(R.drawable.new_post)
          .setContentTitle(imageTitle)
          .setContentText(imageDescription)
          .setLargeIcon(myBitmap)
          .setStyle(NotificationCompat.BigPictureStyle()
                  .bigPicture(myBitmap)
                  .bigLargeIcon(null))
          .build()
إشعار مصغّر وإشعار موسّع يحتوي على صورة زرقاء
الشكل 1 إشعار يستخدم NotificationCompat.BigPictureStyle

إضافة مجموعة كبيرة من النصوص

طبِّق NotificationCompat.BigTextStyle لعرض النص في منطقة المحتوى الموسَّع للإشعار:

  val notification = NotificationCompat.Builder(context, CHANNEL_ID)
          .setSmallIcon(R.drawable.new_mail)
          .setContentTitle(emailObject.getSenderName())
          .setContentText(emailObject.getSubject())
          .setLargeIcon(emailObject.getSenderAvatar())
          .setStyle(NotificationCompat.BigTextStyle()
                  .bigText(emailObject.getSubjectAndSnippet()))
          .build()
إشعار مصغّر وإشعار موسّع باستخدام BigTextStyle
الشكل 2 إشعار يستخدم NotificationCompat.BigTextStyle.

إنشاء إشعار بنمط البريد الوارد

طبِّق NotificationCompat.InboxStyle على إشعار إذا أردت إضافة أسطر ملخّص قصيرة متعدّدة، مثل مقتطفات من الرسائل الإلكترونية الواردة. يتيح لك ذلك إضافة أجزاء متعدّدة من النص يتم اقتطاع كل منها إلى سطر واحد، بدلاً من سطر النص المتواصل الذي يوفّره NotificationCompat.BigTextStyle.

لإضافة سطر جديد، استدعِ الدالة addLine() ستّ مرّات كحد أقصى، كما هو موضّح في المثال التالي. إذا أضفت أكثر من ستة أسطر، لن يظهر سوى الأسطر الستة الأولى.

  val notification = NotificationCompat.Builder(context, CHANNEL_ID)
          .setSmallIcon(R.drawable.baseline_email_24)
          .setContentTitle("5 New mails from Frank")
          .setContentText("Check them out")
          .setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.logo))
          .setStyle(
                  NotificationCompat.InboxStyle()
                  .addLine("Re: Planning")
                  .addLine("Delivery on its way")
                  .addLine("Follow-up")
          )
          .build()

تبدو النتيجة كما في الشكل التالي:

إشعار موسّع بنمط البريد الوارد
الشكل 3 إشعار بنمط البريد الوارد الموسَّع إشعار

عرض محادثة في إشعار

طبِّق NotificationCompat.MessagingStyle لعرض الرسائل المتسلسلة بين أي عدد من الأشخاص. هذا النمط مثالي لتطبيقات المراسلة، لأنّه يوفّر تنسيقًا متسقًا لكل رسالة من خلال التعامل مع اسم المُرسِل ونص الرسالة بشكل منفصل، ويمكن أن تكون كل رسالة مؤلّفة من أسطر متعدّدة.

لإضافة رسالة جديدة، استدعِ الدالة addMessage()، ومرِّر نص الرسالة والوقت الذي تم استلامها فيه واسم المُرسِل. يمكنك أيضًا تمرير هذه المعلومات كعنصر NotificationCompat.MessagingStyle.Message، كما هو موضّح في المثال التالي:

  val message1 = NotificationCompat.MessagingStyle.Message(
          messages[0].getText(),
          messages[0].getTime(),
          messages[0].getSender())
  val message2 = NotificationCompat.MessagingStyle.Message(
          messages[1].getText(),
          messages[1].getTime(),
          messages[1].getSender())
  val notification = NotificationCompat.Builder(context, CHANNEL_ID)
          .setSmallIcon(R.drawable.new_message)
          .setStyle(
                  NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                  .addMessage(message1)
                  .addMessage(message2))
          .build()
إشعار بأسلوب المراسلة
الشكل 4 إشعار يستخدم NotificationCompat.MessagingStyle

عند استخدام NotificationCompat.MessagingStyle، يتم تجاهل أي قيم يتم منحها لـ setContentTitle() وsetContentText().

يمكنك استدعاء الدالة setConversationTitle() لإضافة عنوان يظهر أعلى المحادثة. قد يكون هذا العنوان هو الاسم الذي أنشأه المستخدم للمجموعة أو، إذا لم يكن لها اسم محدّد، قائمة بالمشاركين في المحادثة. لا تضبط عنوان محادثة للمحادثات الفردية، لأنّ النظام يستخدم وجود هذا الحقل كإشارة إلى أنّ المحادثة هي محادثة جماعية.

لا ينطبق هذا النمط إلا على الأجهزة التي تعمل بنظام التشغيل Android 7.0 (مستوى واجهة برمجة التطبيقات 24) والإصدارات الأحدث. عند استخدام مكتبة التوافق (NotificationCompat)، كما هو موضّح سابقًا، يتم تلقائيًا الرجوع إلى نمط إشعار موسَّع متوافق مع الإشعارات التي تستخدم MessagingStyle.

عند إنشاء إشعار كهذا لمحادثة، أضِف إجراء رد مباشر.

إنشاء إشعار يتضمّن عناصر التحكّم في الوسائط

طبِّق MediaStyleNotificationHelper.MediaStyle لعرض عناصر التحكّم في تشغيل الوسائط ومعلومات المسار.

حدِّد المرتبطة MediaSession في الدالة الإنشائية. يتيح ذلك لنظام Android عرض المعلومات الصحيحة عن الوسائط.

استدعِ الدالة addAction() خمس مرّات كحد أقصى لعرض ما يصل إلى خمسة أزرار رموز. استدعِ الدالة setLargeIcon() لضبط صورة الألبوم.

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

يوضّح المثال التالي كيفية إنشاء إشعار يتضمّن عناصر التحكّم في الوسائط:

  val notification = NotificationCompat.Builder(context, CHANNEL_ID)
          // Show controls on lock screen even when user hides sensitive content.
          .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
          .setSmallIcon(R.drawable.ic_stat_player)
          // Add media control buttons that invoke intents in your media service
          .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
          .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent) // #1
          .addAction(R.drawable.ic_next, "Next", nextPendingIntent) // #2
          // Apply the media style template.
          .setStyle(MediaStyleNotificationHelper.MediaStyle(mediaSession)
                  .setShowActionsInCompactView(1 /* #1: pause button \*/))
          .setContentTitle("Wonderful music")
          .setContentText("My Awesome Band")
          .setLargeIcon(albumArtBitmap)
          .build()
إشعار بنمط الوسائط
الشكل 5 إشعار يستخدم MediaStyleNotificationHelper.MediaStyle
CATEGORY_TRANSPORT

مراجع إضافية

راجِع المراجع التالية لمزيد من المعلومات حول MediaStyle والإشعارات القابلة للتوسيع.