Android:修改待处理通知的内容

时间:2015-03-24 11:00:05

标签: android android-notifications

我正在尝试修改android中的现有通知。

我的应用内容
当通知已在系统托盘中并且出现另一个通知时,第二个通知将覆盖第一个通知内容。

我在寻找什么

如果第二个通知到达,那么我不需要覆盖第一个通知,而是需要更改标题以显示2 New Messages,并在通知到达时继续递增。

What it should look like

已执行代码

      Bitmap icon = BitmapFactory.decodeResource(ctx.getResources(),
                R.drawable.icon);
        Intent launchActivity = new Intent(ctx, CordovaApp.class);

        launchActivity.putExtra("heading",newsHeader);
        launchActivity.putExtra("content",newsText);
        PendingIntent pi = PendingIntent.getActivity(ctx,0, launchActivity, PendingIntent.FLAG_NO_CREATE);
        ParseAnalytics.trackAppOpened(launchActivity);
        if(pi==null){
            Log.d(TAG, "Pending Intenet is null.");
        }else{
            Log.d(TAG, "Pending Intenet is not null.");
        }

        Notification noti = new NotificationCompat.Builder(ctx)
        .setContentTitle(newsHeader)
        .setContentText(newsText)
        .setSmallIcon(R.drawable.icon)
        .setLargeIcon(icon)
        .setContentIntent(pi)
        .setAutoCancel(true)
        .build();

        NotificationManager nm = (NotificationManager)ctx.getSystemService(Context.NOTIFICATION_SERVICE);
        nm.notify(0, noti);

更新

我实现了@yogendra下面提到的解决方案,现在我收到两个单独的通知。而不是堆积。以下是更新的代码

Notification noti = new NotificationCompat.Builder(ctx)
            .setContentTitle(newsHeader)
            .setContentText(newsText)
            .setSmallIcon(R.drawable.icon)
            .setGroup(GROUP_KEY_EMAILS)
            .setLargeIcon(icon)
            .setContentIntent(pi)
            .setLights(Color.parseColor("green"), 5000, 5000)
            .setAutoCancel(true)
            .setPriority(2)
            .setTicker("Notification from App")
            .setGroupSummary(true)
            .build();
            NotificationManager nm = (NotificationManager)ctx.getSystemService(Context.NOTIFICATION_SERVICE);
            int timeSeconds = (int)System.currentTimeMillis()%Integer.MAX_VALUE;
            Log.i(TAG,"Timing function called "+timeSeconds);
            nm.notify(timeSeconds, noti);

2 个答案:

答案 0 :(得分:0)

查看您的代码

 nm.notify(0, noti);

其中

notify(int id, Notification notification)

此处0通知ID ,将针对每个通知进行管理。如果您想显示不同的通知,则每次通知ID都应该是唯一的。如果您尝试发布具有相同通知ID的通知,则先前显示的通知将替换为最新通知。

解决方案

现在,您需要显示带有自定义布局的自定义通知,并且每次都更新计数器。

创建Custom Notification.

的源代码

答案 1 :(得分:0)

在班级中创建全局变量:

private int count = 0;
    private ArrayList<String> notificationList = new ArrayList<String>();
    private String GROUP_KEY_EMAILS = "email";
当您需要创建通知并传递消息时需要显示的消息时,

/ 调用方法createNotification。 /

private void createNotification(String notificationMassage) {


    notificationList.add(notificationMassage);

    NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    Bitmap largeIcon = BitmapFactory.decodeResource(getResources(),
            R.drawable.ic_launcher);

    // Create builder
    Builder summaryNotification = new NotificationCompat.Builder(this)
            .setContentTitle(notificationList.size()+" new messages")
            .setSmallIcon(R.drawable.settings)
            .setLargeIcon(largeIcon)
            .setGroup(GROUP_KEY_EMAILS)
            .setGroupSummary(true)
            .setAutoCancel(true);




    // Create style 
    InboxStyle nStyle = new NotificationCompat.InboxStyle();
    nStyle.setBigContentTitle(notificationList.size()+" new messages");
    nStyle.setSummaryText("Summery Text...<you can set as blank>");

    for (String Str : notificationList) {
        nStyle.addLine(Str);
    }
    summaryNotification.setStyle(nStyle);
    mNotificationManager.notify(0, summaryNotification.build());
    count++;
}

/ ** 请在点击通知后清除通知数组列表 * /

有关详细信息,请参阅以下链接:

https://developer.android.com/training/wearables/notifications/stacks.html#AddGroup

https://developer.android.com/training/wearables/notifications/stacks.html#AddGroup