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

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

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

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

لإضافة صورة في الإشعار، عليك ضبط مثال NotificationCompat.BigPictureStyle على setStyle().

Kotlin

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

Java

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

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

Kotlin

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()

Java

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

إضافة جزء كبير من النص

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

Kotlin

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()

Java

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

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

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

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

Kotlin

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()

Java

Notification 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، كما هو موضّح في المثال التالي:

Kotlin

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()

Java

NotificationCompat.MessagingStyle.Message message1 =
        new NotificationCompat.MessagingStyle.Message(messages[0].getText(),
                                                      messages[0].getTime(),
                                                      messages[0].getSender());
NotificationCompat.MessagingStyle.Message message2 =
        new NotificationCompat.MessagingStyle.Message(messages[1].getText(),
                                                      messages[1].getTime(),
                                                      messages[1].getSender());

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_message)
        .setStyle(new NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                .addMessage(message1)
                .addMessage(message2))
        .build();
صورة تعرض إشعارًا في نمط المراسلة
الشكل 4. إشعار باستخدام NotificationCompat.MessagingStyle.

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

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

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

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

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

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

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

يمكنك الاتصال بـ addAction() حتى خمس مرات لعرض ما يصل إلى خمسة أزرار للرموز. يمكنك الاتصال بـ setLargeIcon() لضبط صورة غلاف الألبوم.

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

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

Kotlin

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()

Java

Notification notification = new 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(new MediaStyleNotificationHelper.MediaStyle(mediaSession)
                .setShowActionsInCompactView(1 /* #1: pause button */))
        .setContentTitle("Wonderful music")
        .setContentText("My Awesome Band")
        .setLargeIcon(albumArtBitmap)
        .build();
صورة تعرض إشعارًا بنمط وسائط
الشكل 5. إشعار باستخدام MediaStyleNotificationHelper.MediaStyle.

مراجع إضافية

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