با شروع اندروید 7.0 (سطح API 24)، میتوانید اعلانهای مرتبط را در یک گروه نمایش دهید. برای مثال، اگر برنامه شما اعلانهای ایمیلهای دریافتی را نشان میدهد، همه اعلانهای پیامهای ایمیل جدید را در یک گروه قرار دهید تا با هم جمع شوند.
برای پشتیبانی از نسخههای قدیمیتر، یک اعلان خلاصه اضافه کنید که به تنهایی برای خلاصه کردن همه اعلانهای جداگانه ظاهر میشود. این اغلب با اعلان به سبک صندوق ورودی بهتر انجام می شود.
اگر همه شرایط زیر برای مورد استفاده شما صادق است از گروه های اعلان استفاده کنید:
اعلانهای کودک، اعلانهای کامل هستند و میتوانند به صورت جداگانه و بدون نیاز به جمعبندی گروهی نمایش داده شوند.
نمایان شدن اعلان های کودک به صورت جداگانه یک مزیت دارد. به عنوان مثال:
آنها قابل اجرا هستند، با اقدامات خاص برای هر اعلان.
در هر نوتیفیکیشن اطلاعات بیشتری برای مشاهده کاربر وجود دارد.
اگر اعلانهای شما با معیارهای قبلی مطابقت ندارند، در عوض بهروزرسانی یک اعلان موجود با اطلاعات جدید یا ایجاد یک اعلان به سبک پیام برای نمایش چندین بهروزرسانی در یک مکالمه را در نظر بگیرید.
یک گروه ایجاد کنید و یک اعلان به آن اضافه کنید
برای ایجاد یک گروه اعلان، یک رشته شناسه منحصر به فرد برای گروه تعریف کنید. سپس برای هر اعلانی که در گروه میخواهید، setGroup()
را فراخوانی کنید و نام گروه را ارسال کنید. به عنوان مثال:
کاتلین
val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL" val newMessageNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID) .setSmallIcon(R.drawable.new_mail) .setContentTitle(emailObject.getSenderName()) .setContentText(emailObject.getSubject()) .setLargeIcon(emailObject.getSenderAvatar()) .setGroup(GROUP_KEY_WORK_EMAIL) .build()
جاوا
String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"; Notification newMessageNotification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setSmallIcon(R.drawable.new_mail) .setContentTitle(emailObject.getSenderName()) .setContentText(emailObject.getSubject()) .setLargeIcon(emailObject.getSenderAvatar()) .setGroup(GROUP_KEY_WORK_EMAIL) .build();
بهطور پیشفرض، اعلانها بر اساس زمانی که پست میشوند مرتب میشوند، اما میتوانید ترتیب را با فراخوانی setSortKey()
تغییر دهید.
اگر هشدارهای گروه اعلان باید توسط اعلان دیگری مدیریت شوند، setGroupAlertBehavior()
را فراخوانی کنید، برای مثال، اگر میخواهید فقط خلاصه گروه شما صدا ایجاد کند، همه کودکان در گروه باید رفتار هشدار گروهی را داشته باشند GROUP_ALERT_SUMMARY
. گزینه های دیگر GROUP_ALERT_ALL
و GROUP_ALERT_CHILDREN
هستند.
یک خلاصه گروهی تنظیم کنید
اعلانهای گروهبندیشده باید دارای یک اعلان اضافی باشند که به عنوان خلاصه گروه عمل میکند. برای فعال کردن اعلانهای گروهبندی شده، باید یک خلاصه گروهی تنظیم کنید. این خلاصه گروه باید شامل بخشی از متن هر یک از اعلانهای دیگر در گروه باشد تا به کاربر کمک کند تا بفهمد چه چیزی در گروه است. نحوه نمایش خلاصه گروه به نسخه اندروید بستگی دارد:
در نسخههای اندروید پایینتر از 7.0 (سطح API 24)، که نمیتوانند گروه تودرتو از اعلانها را نشان دهند، سیستم فقط اعلان خلاصه گروه شما را نشان میدهد و بقیه اعلانها را پنهان میکند. کاربر می تواند برای باز کردن برنامه شما، روی اعلان خلاصه گروه ضربه بزند.
در Android نسخه 7.0 و بالاتر، سیستم اعلان خلاصه گروه شما را به عنوان یک گروه تودرتو از اعلانها نشان میدهد که با تکههایی از متن از هر اعلان گروهبندی شده برچسبگذاری شده است. متنی را که در اعلان خلاصه گروه تنظیم کرده اید نمایش نمی دهد. کاربر میتواند گروه تودرتوی اعلانها را برای دیدن اعلانهای فردی در گروه، همانطور که در شکل 1 نشان داده شده است، گسترش دهد.
حتی اگر نسخههای جدیدتر Android متن خلاصه گروهی را که طراحی میکنید نشان نمیدهند، همیشه باید خلاصهای را به صورت دستی تنظیم کنید تا اعلانهای گروهبندی شده را فعال کنید . رفتار خلاصه گروه ممکن است در برخی از انواع دستگاهها، مانند پوشیدنیها، متفاوت باشد. تنظیم محتوای غنی در خلاصه گروه به ارائه بهترین تجربه در همه دستگاهها و نسخهها کمک میکند.
برای افزودن خلاصه گروه به صورت زیر عمل کنید:
یک اعلان جدید با توضیح گروه ایجاد کنید—اغلب بهتر است با اعلان به سبک صندوق ورودی انجام شود.
با فراخوانی
setGroup()
اعلان خلاصه را به گروه اضافه کنید.با فراخوانی
setGroupSummary(true)
مشخص کنید که باید به عنوان خلاصه گروه استفاده شود.
کد زیر نمونه ای از ایجاد خلاصه گروه را نشان می دهد:
کاتلین
// Use constant ID for notifications used as group summary. val SUMMARY_ID = 0 val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL" val newMessageNotification1 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notify_email_status) .setContentTitle(emailObject1.getSummary()) .setContentText("You will not believe...") .setGroup(GROUP_KEY_WORK_EMAIL) .build() val newMessageNotification2 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notify_email_status) .setContentTitle(emailObject2.getSummary()) .setContentText("Please join us to celebrate the...") .setGroup(GROUP_KEY_WORK_EMAIL) .build() val summaryNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID) .setContentTitle(emailObject.getSummary()) // Set content text to support devices running API level < 24. .setContentText("Two new messages") .setSmallIcon(R.drawable.ic_notify_summary_status) // Build summary info into InboxStyle template. .setStyle(NotificationCompat.InboxStyle() .addLine("Alex Faarborg Check this out") .addLine("Jeff Chang Launch Party") .setBigContentTitle("2 new messages") .setSummaryText("janedoe@example.com")) // Specify which group this notification belongs to. .setGroup(GROUP_KEY_WORK_EMAIL) // Set this notification as the summary for the group. .setGroupSummary(true) .build() NotificationManagerCompat.from(this).apply { notify(emailNotificationId1, newMessageNotification1) notify(emailNotificationId2, newMessageNotification2) notify(SUMMARY_ID, summaryNotification) }
جاوا
// Use constant ID for notifications used as group summary. int SUMMARY_ID = 0; String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"; Notification newMessageNotification1 = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notify_email_status) .setContentTitle(emailObject1.getSummary()) .setContentText("You will not believe...") .setGroup(GROUP_KEY_WORK_EMAIL) .build(); Notification newMessageNotification2 = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notify_email_status) .setContentTitle(emailObject2.getSummary()) .setContentText("Please join us to celebrate the...") .setGroup(GROUP_KEY_WORK_EMAIL) .build(); Notification summaryNotification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setContentTitle(emailObject.getSummary()) // Set content text to support devices running API level < 24. .setContentText("Two new messages") .setSmallIcon(R.drawable.ic_notify_summary_status) // Build summary info into InboxStyle template. .setStyle(new NotificationCompat.InboxStyle() .addLine("Alex Faarborg Check this out") .addLine("Jeff Chang Launch Party") .setBigContentTitle("2 new messages") .setSummaryText("janedoe@example.com")) // Specify which group this notification belongs to. .setGroup(GROUP_KEY_WORK_EMAIL) // Set this notification as the summary for the group. .setGroupSummary(true) .build(); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(emailNotificationId1, newMessageNotification1); notificationManager.notify(emailNotificationId2, newMessageNotification2); notificationManager.notify(SUMMARY_ID, summaryNotification);
شناسه اعلان خلاصه باید ثابت بماند تا فقط یک بار پست شود و در صورت تغییر اطلاعات خلاصه، بتوانید بعداً آن را به روز کنید. افزودنهای بعدی به گروه باید منجر به بهروزرسانی خلاصه موجود شود.
برای نمونه کدی که از اعلانها استفاده میکند، به نمونه اعلانهای Android مراجعه کنید.
گروه بندی خودکار
در Android نسخه 7.0 (سطح API 24) و بالاتر، اگر برنامه شما اعلانهایی ارسال کند و کلید گروه یا خلاصه گروهی را مشخص نکند، ممکن است سیستم بهطور خودکار آنها را با هم گروهبندی کند. اعلانهای گروهبندیشده بهطور خودکار با یک اعلان خلاصه گروهی با برچسبهایی از متن برخی از اعلانهای گروهبندی شده ظاهر میشوند. کاربر میتواند این اعلان خلاصه را برای مشاهده هر اعلان جداگانه، مانند اعلانهای گروهبندی شده دستی، گسترش دهد.
رفتار گروهبندی خودکار ممکن است در برخی از انواع دستگاهها متفاوت باشد. برای ارائه بهترین تجربه در همه دستگاهها و نسخهها، اگر میدانید اعلانها باید گروهبندی شوند، کلید گروه و خلاصه گروه را مشخص کنید تا مطمئن شوید که گروهبندی شدهاند.