修改通知徽章

从 Android 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,如图 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() 暂时隐藏该快捷方式。

有关使用通知的更多示例代码,请参阅People 示例