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

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

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

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

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

var notification =
    NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(com.example.compose.snippets.R.drawable.ic_logo)
        .setContentTitle("Title")
        .setContentText("Content text")
        .setStyle(
            NotificationCompat.BigPictureStyle()
                .bigPicture(bitmapImage)
        )
        .build()

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

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setContentTitle("Title")
    .setContentText("Content text")
    .setLargeIcon(Icon.createWithResource(context, R.drawable.dog))
    .setStyle(
        NotificationCompat.BigPictureStyle()
            .bigPicture(bitmapImage)
            .bigLargeIcon(null as Bitmap?)
    )
    .build()

إشعار مصغّر وإشعار موسّع يحتوي على صورة زرقاء
الشكل 1. إشعار باستخدام NotificationCompat.BigPictureStyle

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

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

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setContentTitle("Sender name")
    .setContentText("Email subject")
    .setLargeIcon(Icon.createWithResource(context, R.drawable.dog))
    .setStyle(
        NotificationCompat.BigTextStyle()
            .bigText(someVeryLongMessage)
    )
    .build()

إشعار مصغّر وإشعار موسّع باستخدام BigTextStyle
الشكل 2. إشعار باستخدام NotificationCompat.BigTextStyle

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

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

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

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.mail)
    .setContentTitle("5 New mails from Frank")
    .setContentText("Check them out")
    .setLargeIcon(bitmapImage)
    .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].text,
    messages[0].time,
    messages[0].sender
)
val message2 = NotificationCompat.MessagingStyle.Message(
    messages[1].text,
    messages[1].time,
    messages[1].sender
)
notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.MessagingStyle(Person.Builder().setName("Me").build())
            .addMessage(message1)
            .addMessage(message2)
    )
    .build()

إشعار بنمط المراسلة
الشكل 4. إشعار باستخدام NotificationCompat.MessagingStyle

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

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

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

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

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

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

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

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

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

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

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    // Show controls on lock screen even when user hides sensitive content.
    .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
    .setSmallIcon(com.example.compose.snippets.R.drawable.play)
    // Add media control buttons that invoke intents in your media service
    .addAction(R.drawable.previous, "Previous", null /* Add valid intent */) // #0
    .addAction(R.drawable.pause, "Pause", null /* Add valid intent */) // #1
    .addAction(R.drawable.next, "Next", null /* Add valid intent */) // #2
    // Apply the media style template.
    .setStyle(MediaStyleNotificationHelper.MediaStyle(mediaSession)
        .setShowActionsInCompactView(1 /* #1: pause button */))
    .setContentTitle("Wonderful music")
    .setContentText("My Awesome Band")
    .setLargeIcon(bitmapImage)
    .build()

إشعار بنمط الوسائط
الشكل 5. إشعار باستخدام MediaStyleNotificationHelper.MediaStyle

مراجع إضافية

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