یک اعلان قابل ارتقا ایجاد کنید

یک اعلان اولیه معمولاً شامل یک عنوان، یک خط متن و اقداماتی است که کاربر می تواند در پاسخ انجام دهد. برای ارائه اطلاعات بیشتر، می توانید با اعمال یکی از چندین الگوی اعلان که در این سند توضیح داده شده است، اعلان های بزرگ و قابل ارتقا ایجاد کنید.

برای شروع، یک اعلان با تمام محتوای اصلی همانطور که در ایجاد اعلان توضیح داده شده است بسازید. سپس، setStyle() را با یک شی style فراخوانی کنید و اطلاعات مربوط به هر الگو را، همانطور که در مثال های زیر نشان داده شده است، ارائه دهید.

یک تصویر بزرگ اضافه کنید

برای افزودن یک تصویر به اعلان خود، یک نمونه از 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()

جاوا

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 کنید تا وقتی اعلان بزرگ شد، نماد بزرگ از بین برود:

کاتلین

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

جاوا

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 برای نمایش متن در قسمت محتوای گسترده اعلان استفاده کنید:

کاتلین

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

جاوا

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() را فراخوانی کنید. اگر بیش از شش خط اضافه کنید، فقط شش خط اول قابل مشاهده است.

کاتلین

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

جاوا

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 نیز ارسال کنید:

کاتلین

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

جاوا

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 (سطح API 24) و بالاتر اعمال می‌شود. هنگام استفاده از کتابخانه سازگاری ( NotificationCompat )، همانطور که قبلاً نشان داده شد، اعلان‌ها با MessagingStyle به طور خودکار به یک سبک اعلان توسعه یافته پشتیبانی می‌شوند.

هنگام ایجاد یک اعلان مانند این برای یک مکالمه چت، یک اقدام پاسخ مستقیم اضافه کنید .

یک اعلان با کنترل های رسانه ایجاد کنید

MediaStyleNotificationHelper.MediaStyle را برای نمایش کنترل های پخش رسانه و اطلاعات ردیابی اعمال کنید.

MediaSession مرتبط خود را در سازنده مشخص کنید. این به اندروید اجازه می دهد تا اطلاعات مناسبی را در مورد رسانه شما نمایش دهد.

برای نمایش حداکثر پنج دکمه نماد، تا پنج بار با 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()

جاوا

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 و اعلان‌های قابل ارتقا، به مراجع زیر مراجعه کنید.