اصلاح کردن نشان اعلان

از Android 8.0 (سطح API‏ ۲۶) به بعد، وقتی برنامه مرتبط اعلان فعالی داشته باشد، نشان‌های اعلان (که به آن‌ها نقطه‌های اعلان نیز گفته می‌شود) روی نماد راه‌انداز ظاهر می‌شوند. کاربران می‌توانند نماد برنامه را لمس کنند و نگه دارند تا اعلان‌ها، به‌همراه هرگونه میان‌بر برنامه، همان‌طور که در شکل ۱ نشان داده شده است، نمایان شود.

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

شکل ۱. نشان‌های اعلان و منوِ لمس کردن و نگه داشتن.

غیرفعال کردن نشان‌گذاری

در برخی موارد، نشان‌ها برای اعلان‌های شما منطقی نیستند، بنابراین می‌توانید آن‌ها را به‌صورت کانال به کانال با فراخوانی setShowBadge(false) در شیء NotificationChannel غیرفعال کنید.

برای مثال، ممکن است بخواهید نشان‌های اعلان را در شرایط زیر غیرفعال کنید:

  • اعلان‌های جاری: بیشتر اعلان‌های جاری، مانند پردازش تصویر، کنترل‌های بازپخش رسانه، یا دستورالعمل‌های پیمایش فعلی، به‌عنوان نشان معنی ندارند.
  • یادآوری‌های تقویم: از نشان‌گذاری رویدادهایی که در زمان فعلی رخ می‌دهند اجتناب کنید.
  • رویدادهای ساعت یا زنگ: از نشان‌دار کردن اعلان‌های مربوط به زنگ‌های فعلی خودداری کنید.

نمونه کد زیر نشان می‌دهد که چگونه می‌توان نشان‌ها را برای کانال اعلان پنهان کرد:

کاتلین

val id = "my_channel_01"
val name = getString(R.string.channel_name)
val descriptionText = getString(R.string.channel_description)
val importance = NotificationManager.IMPORTANCE_LOW
val mChannel = NotificationChannel(id, name, importance).apply {
    description = descriptionText
    setShowBadge(false)
}
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)

جاوا

String id = "my_channel_01";
CharSequence name = getString(R.string.channel_name);
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_LOW;
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
mChannel.setDescription(description);
mChannel.setShowBadge(false);

NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(mChannel);

تنظیم تعداد اعلان‌های سفارشی

به‌طور پیش‌فرض، هر اعلان عددی را که در منو لمس طولانی نمایش داده می‌شود افزایش می‌دهد، همان‌طور که در شکل ۱ نشان داده شده است، اما می‌توانید این عدد را برای برنامه‌تان لغو کنید. برای مثال، اگر از یک اعلان برای نمایش چندین پیام جدید استفاده می‌کنید اما می‌خواهید تعداد کل پیام‌های جدید را نشان دهید، این کار می‌تواند مفید باشد.

برای تنظیم شماره سفارشی، با setNumber() در اعلان تماس بگیرید، همان‌طور که در اینجا نشان داده شده است:

کاتلین

var notification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setContentTitle("New Messages")
        .setContentText("You've received 3 new messages.")
        .setSmallIcon(R.drawable.ic_notify_status)
        .setNumber(messageCount)
        .build()

جاوا

Notification notification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setContentTitle("New Messages")
        .setContentText("You've received 3 new messages.")
        .setSmallIcon(R.drawable.ic_notify_status)
        .setNumber(messageCount)
        .build();

اصلاح نماد منوی «لمس کردن و نگه داشتن» اعلان

منو لمس کردن و نگه داشتن نماد بزرگ یا کوچک مرتبط با اعلان را (درصورت وجود) نمایش می‌دهد. به‌طور پیش‌فرض، سیستم نماد بزرگ را نمایش می‌دهد، اما می‌توانید Notification.Builder.setBadgeIconType() را فراخوانی کنید و ثابت BADGE_ICON_SMALL را ارسال کنید تا نماد کوچک نمایش داده شود.

کاتلین

var notification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setContentTitle("New Messages")
        .setContentText("You've received 3 new messages.")
        .setSmallIcon(R.drawable.ic_notify_status)
        .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL)
        .build()

جاوا

Notification notification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setContentTitle("New Messages")
        .setContentText("You've received 3 new messages.")
        .setSmallIcon(R.drawable.ic_notify_status)
        .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL)
        .build();

پنهان کردن میان‌بر تکراری

اگر برنامه‌تان اعلانی ایجاد می‌کند که میان‌بر برنامه را تکرار می‌کند، می‌توانید با فراخوانی setShortcutId()، میان‌بر را به‌طور موقت پنهان کنید تا زمانی که اعلان فعال است.

برای کد نمونه بیشتر که از اعلان‌ها استفاده می‌کند، به برنامه نمونه SociaLite مراجعه کنید.