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

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

برای شروع، یک اعلان با تمام محتوای اولیه همانطور که در بخش «ایجاد اعلان» توضیح داده شده است، بسازید. سپس، تابع 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()

برای اینکه تصویر فقط به صورت تصویر کوچک در هنگام بسته شدن اعلان نمایش داده شود، همانطور که در شکل زیر نشان داده شده است، تابع 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()
یک اعلان کوچک و یک اعلان بزرگ حاوی یک تصویر آبی
شکل ۱. یک اعلان با استفاده از 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
شکل ۲. یک اعلان با استفاده از 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()

نتیجه مانند شکل زیر می‌شود:

اعلان گسترش‌یافته به سبک صندوق ورودی
شکل ۳. یک اعلان به سبک صندوق ورودی گسترده.

نمایش مکالمه در اعلان

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

هنگام استفاده از NotificationCompat.MessagingStyle ، هر مقداری که به setContentTitle() و setContentText() داده شود، نادیده گرفته می‌شود.

می‌توانید تابع setConversationTitle() را برای اضافه کردن عنوانی که بالای مکالمه ظاهر می‌شود، فراخوانی کنید. این عنوان می‌تواند نام ایجاد شده توسط کاربر برای گروه یا اگر نام خاصی ندارد، فهرستی از شرکت‌کنندگان در مکالمه باشد. برای چت‌های تک نفره عنوان مکالمه تعیین نکنید، زیرا سیستم از وجود این فیلد به عنوان اشاره‌ای مبنی بر گروهی بودن مکالمه استفاده می‌کند.

این سبک فقط روی دستگاه‌هایی که اندروید ۷.۰ (سطح 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()
اعلانی با سبک رسانه‌ای
شکل ۵. یک اعلان با استفاده از MediaStyleNotificationHelper.MediaStyle .

منابع اضافی

برای اطلاعات بیشتر در مورد MediaStyle و اعلان‌های قابل ارتقا، به منابع زیر مراجعه کنید.