如何在Android中堆叠通知?

Posted

技术标签:

【中文标题】如何在Android中堆叠通知?【英文标题】:How to stack notifications in Android? 【发布时间】:2016-05-06 16:40:56 【问题描述】:

我是 android 开发的新手,我正在创建一个从服务器(使用 WebSockets)接收消息的应用程序,我想在它发送消息时接收通知。我做到了,一切正常,我唯一想要的就是有一个可以扩展的通知(如 Gmail 或 WhatsApp 通知)。我搜索了过去两天,但没有找到我想要的东西(也来自 Android 开发者网站)。有人可以帮我这样做吗?在此先感谢,如果您需要澄清问题,请原谅我的英语不好,请问:)

这里有类似电话图片的东西:http://developer.android.com/intl/es/training/wearables/notifications/stacks.html(尝试这样做但没有成功。如果你想看,我可以发布代码)

这是我的代码(已更新):

         int n=0;
         final static String GROUP = "group";
public void notifica(String title,String text) 

    NotificationCompat.Builder mBuilder =
            (NotificationCompat.Builder) new NotificationCompat.Builder(this)
                    .setSmallIcon(R.drawable.icona)
                    .setContentTitle(title)
                    .setContentText(text)
                    .setStyle(new NotificationCompat.InboxStyle()
                    .addLine(text)
                    .setBigContentTitle(n+" new messages")
                    .setSummaryText("irrigator"))
                    .setGroup(GROUP)
                    .setGroupSummary(true)
                    .setDefaults(Notification.DEFAULT_ALL) // requires VIBRATE permission
                    .setStyle(new NotificationCompat.BigTextStyle()
                            .bigText(text));

    NotificationManager mNotifyMgr =
            (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    mNotifyMgr.notify(n, mBuilder.build());

n++;

更新2:

 Notification notif = new NotificationCompat.Builder(this)
            .setContentTitle("New mail from a ")
            .setContentText("a")
            .setSmallIcon(R.drawable.icona)
            .setGroup(GROUP_KEY_EMAILS)
            .build();
    NotificationManagerCompat notificationManager =
            NotificationManagerCompat.from(this);
    notificationManager.notify(n, notif);
    n++;

    Notification notif2 = new NotificationCompat.Builder(this)
            .setContentTitle("New mail from dsd" )
            .setContentText("td")
            .setSmallIcon(R.drawable.icona)
            .setGroup(GROUP_KEY_EMAILS)
            .build();
    notificationManager.notify(n, notif2);
    n++;

【问题讨论】:

“它不起作用”是什么意思?你看到什么结果?其次第一步是设置组,你还没有设置组。 我已经更新了代码,它只是像以前一样每次发送新消息时都会显示一个带有文本的新通知 您正在为所有通知分配相同的 ID。这将简单地替换前一个,而不是向组中添加一个新的。 我忘记粘贴 n++;我更新了代码 这段代码在哪里? n 在每个通知上是否真的不同,还是每次都重置为 0。 【参考方案1】:

经过一番挖掘,我意识到目前大多数设备(一些可穿戴设备除外)不支持堆叠,因此您必须手动执行一些操作。我最终做的是将通知计数存储在 SharedPrefs 中,然后在新通知出现时更新消息,现在用新标题覆盖以前的通知。 FCMService.java

SharedPreferences sharedPrefs = Utils.getSharedPrefs(getApplicationContext());
int notificationCount = sharedPrefs.getInt("CURRENT_OUTSTANDING_NOTIFICATION_COUNT", 0);

notificationCount++;

SharedPreferences.Editor editor = sharedPrefs.edit();
editor.putInt("CURRENT_OUTSTANDING_NOTIFICATION_COUNT", notificationCount);
editor.commit();

if(notificationCount>1)
    messageTitle = notificationCount+" New Messages";
    messageText = "Last Message Content:"+ messageText;


//send notification with the new title and text
...

然后在读取您的通知的活动中,只需重置计数器,瞧,您就完成了。 NotificationViewActivity.java

//somewhere where notifications are read
SharedPreferences.Editor editor = sharedPrefs.edit();
editor.putInt("CURRENT_OUTSTANDING_NOTIFICATION_COUNT", 0);
editor.commit();

【讨论】:

以上是关于如何在Android中堆叠通知?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 中的索引堆叠。如何在所有其他小部件之上显示容器?

如何在 Android 中获取 Stacked Notifications 的文本

如何在 Android Studio 的编辑器中“堆叠”代码?

android图像水平堆叠在一起

如何在推送通知 (GCM) android 中发送图像?

如何在android通知中增加remoteview的高度