3

我以这种方式发出抬头通知:

Notification.Builder nb = new Notification.Builder(context)
        .setSmallIcon(icon)
        .setContentTitle("Title")
        .setContentText("Content")
        .setDeleteIntent(delete)
        .setPriority(Notification.PRIORITY_HIGH)
        .setVibrate(new long[0]);

notificationManager.notify(1, nb.build()); // TODO hardcode

我第一次在测试设备上安装应用程序时,通知是抬头,但如果我扩展通知区域(抬头仍在运行时)并从那里关闭通知,下次通知不会抬头。重新安装应用程序通知后再次抬头。是否有任何原因导致抬头行为不能保持不变?

4

2 回答 2

9

抬头通知有一个内置的速率限制 - 如果用户向上滑动你的抬头通知(将其放回通知托盘)或向一侧滑动(关闭它),那么这会向系统发出信号以阻止某些人的进一步抬头通知时间段(默认为约一分钟)。

于 2015-12-30T21:49:51.913 回答
0

我希望下面的代码能最大程度地帮助您了解哪些属性对于显示提醒通知最重要,并且通过使用此代码,我没有发现有时无法正常工作的问题。

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    sendNotification(remoteMessage.getNotification().getTitle(),     
    remoteMessage.getNotification().getBody(),remoteMessage.getData());
}

private void sendNotification(String messageTitle, String messageBody, 
Map<String, String> data) {

Intent intent = HomeActivity.getHomeActivityIntent(this,data.get(Constants.PUSH_URL));

   PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
           PendingIntent.FLAG_ONE_SHOT);

   NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, "1")
           .setSmallIcon(R.drawable.icon_notification)
           .setContentTitle(messageTitle)
           .setContentText(messageBody)
           .setContentIntent(pendingIntent)
           .setDefaults(DEFAULT_SOUND | DEFAULT_VIBRATE) //Important for heads-up notification
           .setPriority(Notification.PRIORITY_MAX); //Important for heads-up notification

   Notification buildNotification = mBuilder.build();
   int notifyId = (int) System.currentTimeMillis(); //For each push the older one will not be replaced for this unique id

   // Since android Oreo notification channel is needed.
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
       String name = getString(R.string.channel_name);
       String description = getString(R.string.channel_description);
       int importance = NotificationManager.IMPORTANCE_HIGH; //Important for heads-up notification
       NotificationChannel channel = new NotificationChannel(getResources().getString(R.string.default_notification_channel_id),
               name,
               importance);
       channel.setDescription(description);
       channel.setShowBadge(true);
       channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
       NotificationManager notificationManager = getSystemService(NotificationManager.class);

       if (notificationManager != null) {
           notificationManager.createNotificationChannel(channel);
           notificationManager.notify(notifyId, buildNotification);
       }
   }else{

       NotificationManager mNotifyMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
       if (mNotifyMgr != null) {
           mNotifyMgr.notify(notifyId, buildNotification);
       }
   }
}

要显示提示,复制并粘贴整个代码,并根据字符串和导入修复错误。在获得成功的提示后,根据您的要求删除或添加任何内容。

您也可以在此链接上关注我在媒体上的帖子以获得更详细的答案。

于 2019-02-26T16:52:24.523 回答