如何在屏幕上显示 Android 通知以及状态栏图标?
How to show Android Notifications on screen as well as status bar icon?
我觉得这应该是微不足道的,但我似乎无法在 phone 的屏幕上显示通知 - 它只显示在顶部的状态栏中。
作为我想要执行的操作的示例,以下是当您收到消息时 Facebook Messenger 在屏幕上的显示方式。
每当我发送通知时,它所做的只是在状态栏中显示小图标 - 即使我将优先级设置为 PRIORITY_MAX。是否需要进行其他设置才能使其显示在屏幕上而不仅仅是状态栏?
通知显示代码:
PendingIntent contentIntent = PendingIntent.getActivity(context, nextId++, intent, PendingIntent.FLAG_CANCEL_CURRENT);
Notification.Builder builder = new Notification.Builder(context)
.setContentTitle(title)
.setContentText(description)
.setContentIntent(contentIntent)
.setSmallIcon(R.drawable.ic_stat_notification)
.setLargeIcon(largeIcon)
.setPriority(Notification.PRIORITY_DEFAULT)
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_ALL);
if (android.os.Build.VERSION.SDK_INT >= 21) {
builder.setColor(context.getResources().getColor(R.color.orange_500))
.setVisibility(Notification.VISIBILITY_PUBLIC);
}
Notification notification = builder.build();
notificationManager.notify(id, notification);
考虑到所有因素,使用 NotificationCompat.Builder
而不是 Notification.Builder
确实是 的好主意,更不用说手动创建 Notification
了。它为您提供了良好的向后兼容性和优雅的降级(一直回到 API 级别 4,也称为 "gadzooks, that's old")。 AFAIK,当与 NotificationManagerCompat
一起使用时,这是让某些 Android Wear 东西运行的唯一方法。而且,在这种情况下,它似乎更喜欢更新的 Android 5.0+ 功能。
在这种情况下,NotificationCompat.Builder
上的 setPriority(NotificationCompat.PRIORITY_HIGH)
,与 NotificationManagerCompat
一起使用,将在 Android 5.0+ 上为您提供提醒通知。
还有一点,请确保您为通知设置的 notification channel 的 'importance' 设置为 NotificationManager.IMPORTANCE_HIGH
。
这配置了发布到此频道的视觉干扰通知的方式,'high' 将允许它查看。如果您将此设置为 NotificationManager.IMPORTANCE_DEFAULT
则不会!
请记住,在配置通知渠道时,一旦代码在您的设备上 运行,您将无法再次更改。因此,如果您需要更改重要性,您需要卸载应用程序然后重新运行,您应该会在屏幕上看到通知!
我觉得这应该是微不足道的,但我似乎无法在 phone 的屏幕上显示通知 - 它只显示在顶部的状态栏中。
作为我想要执行的操作的示例,以下是当您收到消息时 Facebook Messenger 在屏幕上的显示方式。
每当我发送通知时,它所做的只是在状态栏中显示小图标 - 即使我将优先级设置为 PRIORITY_MAX。是否需要进行其他设置才能使其显示在屏幕上而不仅仅是状态栏?
通知显示代码:
PendingIntent contentIntent = PendingIntent.getActivity(context, nextId++, intent, PendingIntent.FLAG_CANCEL_CURRENT);
Notification.Builder builder = new Notification.Builder(context)
.setContentTitle(title)
.setContentText(description)
.setContentIntent(contentIntent)
.setSmallIcon(R.drawable.ic_stat_notification)
.setLargeIcon(largeIcon)
.setPriority(Notification.PRIORITY_DEFAULT)
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_ALL);
if (android.os.Build.VERSION.SDK_INT >= 21) {
builder.setColor(context.getResources().getColor(R.color.orange_500))
.setVisibility(Notification.VISIBILITY_PUBLIC);
}
Notification notification = builder.build();
notificationManager.notify(id, notification);
考虑到所有因素,使用 NotificationCompat.Builder
而不是 Notification.Builder
确实是 的好主意,更不用说手动创建 Notification
了。它为您提供了良好的向后兼容性和优雅的降级(一直回到 API 级别 4,也称为 "gadzooks, that's old")。 AFAIK,当与 NotificationManagerCompat
一起使用时,这是让某些 Android Wear 东西运行的唯一方法。而且,在这种情况下,它似乎更喜欢更新的 Android 5.0+ 功能。
在这种情况下,NotificationCompat.Builder
上的 setPriority(NotificationCompat.PRIORITY_HIGH)
,与 NotificationManagerCompat
一起使用,将在 Android 5.0+ 上为您提供提醒通知。
还有一点,请确保您为通知设置的 notification channel 的 'importance' 设置为 NotificationManager.IMPORTANCE_HIGH
。
这配置了发布到此频道的视觉干扰通知的方式,'high' 将允许它查看。如果您将此设置为 NotificationManager.IMPORTANCE_DEFAULT
则不会!
请记住,在配置通知渠道时,一旦代码在您的设备上 运行,您将无法再次更改。因此,如果您需要更改重要性,您需要卸载应用程序然后重新运行,您应该会在屏幕上看到通知!