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

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

للبدء، أنشِئ إشعارًا يتضمّن كل المحتوى الأساسي كما هو موضَّح في أنشئ إشعارًا. بعد ذلك، يُرجى اتّباع الخطوات التالية: مكالمة 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() لإضافة عنوان يظهر أعلى المحادثة قد يكون هذا هو اسم المجموعة الذي أنشأه المستخدم، أو إذا لم يكن لها اسم محدد، قائمة المشاركين في المحادثة. عدم تعيين عنوان للمحادثة لـ محادثات بين شخصين، نظرًا لأن النظام يستخدم وجود هذا الحقل كتلميح أن المحادثة عبارة عن مجموعة.

لا ينطبق هذا النمط إلا على الأجهزة التي تعمل بنظام التشغيل Android 7.0 (المستوى 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 و الإشعارات القابلة للتوسيع