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

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

برای شروع، اعلانی با همه محتوای پایه بسازید، همان‌طور که در ایجاد اعلان توضیح داده شده است. سپس، با یک شیء سبک با 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 7.0 (سطح میانای برنامه‌سازی کاربردی ۲۴) و بالاتر اعمال می‌شود. هنگام استفاده از کتابخانه سازگاری (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 و اعلان‌های ازهم بازشدنی، به مرجع‌های زیر مراجعه کنید.