我试图将Whatsapp / Email通知样式添加到我的应用中,当一个通知到来时,又有另一个通知出现在同一条消息上。我通过将通知保存到单击消息时被删除的数据库中来完成此操作。目前,我的循环效果很好,除非我发送了2个以上的通知(例如4)。
[![工作时] [1]] [1]

当它坏了..

[![pics] [2]] [2]

数字代表我发送通知的顺序。如您所见,四个重复两次,而不是没有重复。屏幕截图2从上到下的必需顺序为:四个->三个->两个->一个。

这是循环的代码。

    Cursor cur;
    ............
    ............
    int imsg = cur.getColumnIndex(KEY_MSG);
    int ititle = cur.getColumnIndex(KEY_TITLE);

    NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
    inboxStyle.setBigContentTitle(makeNotificationLine(title, ""));

    if (c == 0) {
        //when DB is empty...
        inboxStyle.addLine(msg);
    } else {

        for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {
            num++;
            inboxStyle.setBigContentTitle("Reelforge");
            inboxStyle.addLine(makeNotificationLine(title, msg));
            inboxStyle.addLine(makeNotificationLine(cur.getString(ititle), cur.getString(imsg)));
        }
    }

    inboxStyle.setSummaryText(num + " new notifications");
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle(title)
            .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS)
            .setContentText(msg);
        mBuilder.setPriority(NotificationCompat.PRIORITY_DEFAULT);
        mBuilder.setAutoCancel(true);
        mBuilder.setStyle(inboxStyle);
        mBuilder.setContentIntent(contentIntent);

        the_db.close();
        Random random = new Random();
        int m = random.nextInt(9999 - 1000) + 1000;
        String x = m + "";

        SimpleDateFormat sdf = new SimpleDateFormat("LLL d, yyyy");
        sdf.setTimeZone(TimeZone.getDefault());
        String date = sdf.format(new Date());

        try {
            the_db.open();
            the_db.createmsgEntry(x, title, msg);
            the_db.createmsgEntry2(x, title, msg, date);
            the_db.close();

        } catch (Exception e) {
            the_db.close();
        } finally {
            if (the_db != null) {
                the_db.close();
            }
        }

        mNotificationManager.notify(N_ID, mBuilder.build());



public long createmsgEntry(String s2, String s3, String s4) {

    ContentValues cv = new ContentValues();
    cv.put(KEY_MSGID, s2);
    cv.put(KEY_TITLE, s3);
    cv.put(KEY_MSG, s4);

    return ourDatabase.insert(DATABASE_TABLE, null, cv);

}

最佳答案

终于解决了...

mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    int num = 0;
    Random random = new Random();
    int m = random.nextInt(9999 - 1000) + 1000;

    String x = m + "";

    SimpleDateFormat sdf = new SimpleDateFormat("LLL d, yyyy");
    sdf.setTimeZone(TimeZone.getDefault());
    String date = sdf.format(new Date());

    Intent i = new Intent(this, MainActivity.class);

    i.setAction("gcm");

    //opened after clicking
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, i, 0);

    try {
        the_db.open();
        c = the_db.getCount();
        cur = the_db.getmsgData();
        the_db.createmsgEntry(x, title, msg);
        the_db.createmsgEntry2(x, title, msg, date);

    } catch (Exception e) {
        the_db.close();
    }

    int imsg = cur.getColumnIndex(KEY_MSG);
    int ititle = cur.getColumnIndex(KEY_TITLE);

    NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
    inboxStyle.setBigContentTitle(makeNotificationLine(title, ""));

    if (c == 0) {
        num++;
        inboxStyle.addLine(msg);
    } else {
        for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {
            num++;
            inboxStyle.setBigContentTitle("New Notifications");
            inboxStyle.addLine(makeNotificationLine(cur.getString(ititle), cur.getString(imsg)));
        }
    }

    inboxStyle.setSummaryText(num + " new notifications");

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle(title)
            .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS)
            .setContentText(msg);
    mBuilder.setPriority(NotificationCompat.PRIORITY_DEFAULT);
    mBuilder.setAutoCancel(true);
    mBuilder.setStyle(inboxStyle);
    mBuilder.setContentIntent(contentIntent);
    the_db.close();

    mNotificationManager.notify(N_ID, mBuilder.build());

07-28 02:20
查看更多