ایجاد اعلان ازهم بازشدنی

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

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

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

نتیجه شبیه شکل زیر است:

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

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

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

اعلانی به‌سبک پیام‌رسانی
شکل ۴. اعلانی بااستفاده از NotificationCompat.MessagingStyle.

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

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

این سبک فقط در دستگاه‌های دارای Android نسخه ۷.۰ (سطح میانای برنامه‌سازی کاربردی ۲۴) و بالاتر اعمال می‌شود. هنگام استفاده از کتابخانه سازگاری (NotificationCompat)، همان‌طور که قبلاً نشان داده شد، اعلان‌های دارای MessagingStyle به‌طور خودکار به سبک اعلان گسترده پشتیبانی‌شده برمی‌گردند.

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

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

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

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

addAction() را حداکثر پنج بار فراخوانی کنید تا حداکثر پنج دکمه نماد نمایش داده شود. برای تنظیم جلد آلبوم، با 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()

اعلانی با سبک رسانه
شکل ۵. اعلانی بااستفاده از MediaStyleNotificationHelper.MediaStyle.

منابع بیشتر

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