抬头通知-Android Lollipop

我试图显示通知式的抬头,但我不能。 我尝试了什么

final Notification.Builder notif = new Builder(getApplicationContext())
    .setContentTitle(getString(R.string.title))
    .setContentText(getString(R.string.text))
//  .setTicker(getString(R.string.tick)) removed, seems to not show at all
//  .setWhen(System.currentTimeMillis()) removed, match default
//  .setContentIntent(contentIntent) removed, I don't neet it
    .setColor(Color.parseColor(getString(R.color.yellow))) //ok
    .setSmallIcon(R.drawable.ic_small) //ok
    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))
//  .setCategory(Notification.CATEGORY_CALL) does not seem to make a difference
    .setPriority(Notification.PRIORITY_MAX); //does not seem to make a difference
//  .setVisibility(Notification.VISIBILITY_PRIVATE); //does not seem to make a difference

mNotificationManager.notify(Constants.NOTIFICATION_ID, notif.build());

通知仅在栏中显示为图标。我在API 21仿真器上使用API 21(不是L预览)我试过了:
android:Theme.Holo.NoActionBar
android:Theme.Holo.NoActionBar.Fullscreen
NotificationCompat.Builder

SDK示例不可用。 有人知道怎么做吗?

我通过添加使其工作:

.setDefaults(Notification.DEFAULT_VIBRATE)

这是最好的方法吗?

8个解决方案
82 votes

根据通知,您需要设置振动或铃声才能使抬头工作。 但是,这是一个快速技巧,不需要VIBRATE权限即可产生抬头通知:

notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
if (Build.VERSION.SDK_INT >= 21) notificationBuilder.setVibrate(new long[0]);

编辑:

不要滥用抬头通知。 有关何时使用抬头通知的信息,请参见此处:

MAX:用于紧急和紧急通知,提醒用户注意时间紧急或需要解决的情况,然后他们才能继续执行特定任务。

高:主要用于重要的交流,例如消息或聊天事件,其中包含用户特别感兴趣的内容。 高优先级通知触发平视通知显示。

Mygod answered 2020-02-14T00:04:02Z
15 votes

根据Google的说法:[https://developer.android.com/design/patterns/notifications.html]

如果通知的优先级标记为“高”,“最大”或“全屏”,则会收到平视通知。

因此,以下代码应生成提示通知:

.setPriority(Notification.PRIORITY_MAX)

应该足够了。 但是显然也必须设置.setDefaults(Notification.DEFAULT_VIBRATE)。 希望Google在其最终版本的Android 5.0中解决此问题。

不确定错误或功能...

MLS answered 2020-02-14T00:04:39Z
8 votes

我所有的应用程序都没有显示通知,例如,我有一个配备Android 5.1.1的Nexus 6,但是我认为这是自Android 5.0起的一个麻烦,我必须设置:

.setPriority(Notification.PRIORITY_HIGH)

正确设置和管理通知优先级

Android支持通知的优先级标志。 此标志使您可以影响通知相对于其他通知的显示位置,并有助于确保用户始终首先看到其最重要的通知。 发布通知时,可以从以下优先级中进行选择:

MAX用于紧急和紧急通知,提醒用户注意时间紧急或需要解决的情况   他们可以继续执行特定任务。

高主要用于重要的交流,例如消息或聊天事件,其内容对于   用户。 高优先级通知触发平视通知   显示。

默认值用于不属于此处描述的其他优先级的所有通知,如果应用程序没有   优先处理自己的通知

LOW用于通知您希望通知用户的信息,但不那么紧急。 低优先级通知倾向于   显示在列表的底部,这使它们成为   公开或非定向社交更新之类的内容:用户要求   收到有关它们的通知,但是这些通知永远都不会   优先于紧急或直接沟通。

MIN用于上下文或背景信息,例如天气信息或上下文位置信息。 最低优先级   通知不会出现在状态栏中。 用户发现他们   关于扩展通知栏。

Jorgesys answered 2020-02-14T00:05:33Z
6 votes

要设置优先级,请使用Notification Builder的setPriority函数(在API 16中引入)以及setDefaults(在API 11中添加)。 根据您的应用要求选择优先级DEFAULT,HIGH,LOW,MAX,MIN。 也可以在此处选择默认值。

一个小片段:

notification = NotificationBuilder(service)
notification.setPriority(Notification.PRIORITY_MAX)
notification.setDefaults(Notification.DEFAULT_ALL)
unixia answered 2020-02-14T00:05:57Z
1 votes

应设置高优先级并使用铃声或振动。

notificationBuilder.setDefaults(Notification.DEFAULT_ALL);
notificationBuilder.setPriority(Notification.PRIORITY_HIGH);

参考:[https://developer.android.com/guide/topics/ui/notifiers/notifications.html#Heads-up]

抬头通知

使用Android 5.0(API级别21)时,通知可以显示在较小的位置   设备上的浮动窗口(也称为平视通知)   处于活动状态(即设备已解锁且屏幕打开)。   这些通知看起来类似于您的紧凑形式   通知,但平视通知还显示操作   纽扣。 用户可以执行或取消平视通知,而无需   离开目前的应用程式。

可能触发平视通知的条件示例   包括:

  • 用户的活动处于全屏模式(应用程序使用fullScreenIntent),或者
  • 通知具有较高的优先级,并使用铃声或振动
situee answered 2020-02-14T00:06:44Z
0 votes

在您的代码中添加此行以显示提示通知,该通知仅适用于Lollipop版本

notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
Amit Desale answered 2020-02-14T00:07:05Z
0 votes

对于运行Android 8.0(API级别26)及更高版本的设备,通知渠道要求高度重视

new NotificationChannel("ID", "Channel Name", NotificationManager.IMPORTANCE_HIGH);
Megaetron answered 2020-02-14T00:17:06Z
0 votes

您无需设置振动。 您只需要设置声音即可。 少打扰。 我没有任何声音,但通知显示在顶部。 确保使用PRIORITY_HIGH和DEFAULT_SOUND。

 NotificationChannel channel = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            channel = new NotificationChannel("my_channel_01",
                    "Channel human readable title",
                    NotificationManager.IMPORTANCE_HIGH);
            mNotificationManager.createNotificationChannel(channel);
        }


        Notification notification =
                new NotificationCompat.Builder(this, "notify_001")
                        .setSmallIcon(R.drawable.ic_check)
                        .setContentTitle("My notification")
                        .setContentText("Hello World!")
                        .setPriority(Notification.PRIORITY_HIGH)
                        .setDefaults(NotificationCompat.DEFAULT_SOUND)
                        .setChannelId("my_channel_01").build();


        mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(0, notification);
live-love answered 2020-02-14T00:17:26Z
translate from https://stackoverflow.com:/questions/26451893/heads-up-notification-android-lollipop