如何在屏幕上显示Android通知以及状态栏图标?

时间:2015-05-12 19:01:32

标签: android notifications android-notifications

我觉得这应该是微不足道的,但我似乎无法在手机屏幕上显示通知 - 它只显示在顶部的状态栏中。

关于我想要做的一个例子,这是Facebook Messenger在收到消息时在屏幕上显示的方式。

Facebook on-screen notification

每当我发送通知时,它所做的就是在状态栏中显示小图标 - 即使我将优先级设置为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);

2 个答案:

答案 0 :(得分:11)

考虑到所有因素,使用NotificationCompat.Builder而不是Notification.Builder是一个真的好主意,更不用说手动创建Notification了。它为您提供了良好的向后兼容性和优雅的降级(一直回到API级别4,也称为" gadzooks,这是旧的")。 AFAIK,与NotificationManagerCompat一起使用时,它是获取Android Wear内容的唯一途径。而且,在这种情况下,使用较新的Android 5.0+功能似乎更快乐。

在这种情况下,与setPriority(NotificationCompat.PRIORITY_HIGH)一起使用的NotificationCompat.Builder上的NotificationManagerCompat会在Android 5.0 +上提供单挑通知。

答案 1 :(得分:5)

另一方面,请确保为通知设置的notification channel的“重要性”设置为NotificationManager.IMPORTANCE_HIGH

这可配置发布到此频道的视觉干扰通知的状态,“高”将允许它窥视。如果您将此设置为NotificationManager.IMPORTANCE_DEFAULT,那么它将不会!

在配置通知频道时,请记住,一旦代码在您的设备上运行,您将无法再次更改它。因此,如果您需要更改重要性,则需要卸载该应用程序,然后重新运行,您应该会在屏幕上看到该通知!