修改通知标志

从 8.0(API 级别 26)开始,当关联的应用有活动通知时,启动器图标上会显示通知标志(也称为通知圆点)。用户可以长按应用图标以显示通知(以及任何应用快捷方式),如图 1 所示。

默认情况下,这些圆点会显示在支持它们的启动器应用中,您的应用无需执行任何操作。不过,在某些情况下,您可能并不想要显示通知圆点,或者想要精确控制显示在那里的通知。

图 1. 通知标志和长按菜单

停用标志

在某些情况下,您的通知并不适合显示标志,您可以通过对 NotificationChannel 对象调用 setShowBadge(false),针对每个渠道停用标志。

例如,您可能希望在以下情况下停用通知标志:

  • 持续显示的通知:大多数持续显示的通知(例如图片处理、媒体播放控件或当前导航说明)都不适合显示为标志。
  • 日历提醒:避免当前时间发生标志事件。
  • 时钟或闹钟事件:避免与当前闹钟相关的标志通知。

以下示例代码说明了如何针对某个通知渠道隐藏标志:

Kotlin

    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)
    

Java

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

设置自定义通知计数

默认情况下,长按菜单上显示的数字会随着通知数量增加(如图 1 所示),但您可以针对自己的应用替换此数字。例如,如果您仅使用一个通知来表示多条新信息,但您希望此处的计数代表新信息总数,这样做可能会很有用。

要设置自定义数字,请对通知调用 setNumber(),如下所示:

Kotlin

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

Java

    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 常量来显示小图标。

Kotlin

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

Java

    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(),在通知处于活动状态时暂时隐藏该快捷方式。

如需获取更多使用通知的示例代码,请参阅 Android 通知示例