我试图将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());