【问题标题】:Heads-up Notification - Android Lollipop提醒通知 - Android Lollipop
【发布时间】:2014-10-19 15:08:33
【问题描述】:

我正在尝试显示通知类型的提示,但我不能。我尝试了什么

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" Tegra Shield 上测试)。如果您必须使用这些(天知道为什么),请至少在您的应用中禁用它们!
  • @user1499731 Android 原生支持禁用应用 IIRC 的通知窥视。
  • setDefaults(Notification.DEFAULT_VIBRATE) 有效
  • 我已经在medium.com/@md.noor.asad/…发布了一个关于显示提醒通知的简介

标签: android android-5.0-lollipop android-notifications


【解决方案1】:

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

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

编辑:

不要滥用提醒通知。请参阅here 了解何时使用提醒通知:

MAX:用于提醒用户时间紧迫或需要解决才能继续执行特定任务的紧急通知。

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

【讨论】:

  • 这不是真的 - 我最近使用此方法在三星 Android 4 设备上收到了 SecurityException 崩溃报告
  • @DaiwikDaarun 是setVibrate抛出的吗?如果它只能在 Android 4.x 上重现,我们可以添加运行时版本检查。
【解决方案2】:

根据谷歌: https://developer.android.com/design/patterns/notifications.html

如果通知的优先级标记为高、最大或全屏,则会收到提示通知。

所以下面的代码应该生成一个提示通知:

.setPriority(Notification.PRIORITY_MAX)

应该够了。但显然 .setDefaults(Notification.DEFAULT_VIBRATE) 也必须设置。希望谷歌能在他们的 Android 5.0 最终版本中解决这个问题。

不确定是错误还是功能...

【讨论】:

  • Notification.PRIORITY_HIGH 足够高,您不必(并且可能不应该)设置PRIORITY_MAX 只是因为您希望通知显示为单挑。
  • 似乎必须在通知上设置声音和/或振动才能显示为“抬头”。这实际上是有道理的,因为看到无声的“提醒”通知会很奇怪,否则它可能并不明显是系统通知。
  • 在 Android M 中,现在可以针对每个应用禁用抬头通知/查看。因此,如果禁用此窥视功能,无论您做什么,您的抬头通知都不会显示。请记住这一点。
  • 虽然文档记录不佳,但它在这里:developer.android.com/guide/topics/ui/notifiers/…The notification has high priority **and** uses ringtones or vibrations
【解决方案3】:

我所有的应用程序都没有显示通知,例如我有一个带有 Android 5.1.1 的 Nexus 6,但我认为这是自 Android 5.0 以来的一个问题,我必须设置:

.setPriority(Notification.PRIORITY_HIGH)

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

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

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

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

DEFAULT 用于不属于此处描述的任何其他优先级的所有通知,并且如果应用程序不属于 优先考虑自己的通知

LOW 用于您希望通知用户但不那么紧急的通知。低优先级通知往往 显示在列表的底部,这使它们成为一个不错的选择 诸如公开或非定向社交更新之类的事情:用户已要求 被通知他们,但这些通知不应该采取 优先于紧急或直接沟通。

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

【讨论】:

    【解决方案4】:

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

    一个小sn-p:

    notification = NotificationBuilder(service)
    notification.setPriority(Notification.PRIORITY_MAX)
    notification.setDefaults(Notification.DEFAULT_ALL)
    

    【讨论】:

      【解决方案5】:

      请检查您的手机是否处于“静音”或“请勿打扰”模式。我花了一天才找到它。我只是把这个评论留给那些遇到同样问题并找到这个问题的人。

      【讨论】:

        【解决方案6】:

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

        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)中,通知可以以小字体显示 设备时的浮动窗口(也称为提示通知) 处于活动状态(即设备已解锁且其屏幕已打开)。 这些通知看起来类似于您的紧凑形式 通知,除了提示通知还显示操作 纽扣。用户可以在没有提示的情况下对提示通知采取行动或解除 离开当前应用。

        可能触发提醒通知的条件示例 包括:

        • 用户的 Activity 处于全屏模式(应用使用 fullScreenIntent),或者
        • 通知具有高优先级并使用铃声或振动

        【讨论】:

          【解决方案7】:

          对于运行 Android 8.0(API 级别 26)及更高版本的设备,通知通道需要很高的重要性

          new NotificationChannel("ID", "Channel Name", NotificationManager.IMPORTANCE_HIGH);
          

          【讨论】:

            【解决方案8】:

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

            notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
            

            【讨论】:

              【解决方案9】:

              您无需设置振动。您只需要设置声音。它的侵入性较小。我没有听到任何声音,但通知显示在顶部。确保使用 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);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-10-24
                • 2015-05-01
                • 2018-09-25
                • 2019-08-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多