如何在android中显示错过的聊天通知计数?

时间:2016-01-18 06:49:57

标签: android notifications android-notifications android-pendingintent

嗨我正在聊天应用程序中工作,如果A人发送请求,如果B人处于空闲状态,我会在收到A人的通知时显示通知,如果B人没有回复60秒,我清除通知和通话错过通知。但是如果处于空闲状态并且如果用户看到错过的聊天并清除通知,我需要显示错过的聊天通知的总数,如果下一个通知到来,它应该显示计数为1类似于电话未接来电。怎么办?这是我做的代码。我需要在通知中显示计数。

这是我试过的代码。

        notBuilder.setContentIntent(pendingIntent);
        notificationManager.notify(notificationID, notBuilder.build());
        clearPendingNotification(notificationID);
        }
     private void clearPendingNotification(final int id) {
    try {
        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
                NotificationManager mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                mManager.cancel(id);
                missedNotification("test");
            }
        }, Constants.CHAT_REQ_TIME);
    } catch (Exception e) {
        LogMessage.e(Constants.TAG, e);
    }
    private void missedNotification(String message) {
    Intent notificationIntent = null;
    Context context = getApplicationContext();
    int notificationID = new Random().nextInt();
    NotificationManager notificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);
    NotificationCompat.Builder notBuilder = new NotificationCompat.Builder(
            context);
    notBuilder.setSmallIcon(R.drawable.ic_notification);
    notBuilder.setContentTitle("Missed chat request");
    notBuilder.setContentText("You have" + " " + message + " "
            + "missed chat request from customers");
    notBuilder.setAutoCancel(true);
    notBuilder.setDefaults(Notification.DEFAULT_SOUND);
    notificationIntent = new Intent(context, ActivityExpertDasboard.class);
    notificationIntent.putExtra(Constants.IS_CHAT_REQUEST, true);
    notificationIntent
            .putExtra(Constants.KEY_NOFICATION_ID, notificationID);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
            | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    notificationIntent.putExtra(Constants.CHAT_USER_NAME, msgTo);
    PendingIntent pendingIntent = PendingIntent
            .getActivity(context, notificationID, notificationIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT
                            | PendingIntent.FLAG_ONE_SHOT);
    notBuilder.setContentIntent(pendingIntent);
    notificationManager.notify(notificationID, notBuilder.build());

}

}

提前致谢。

2 个答案:

答案 0 :(得分:2)

添加@ Karakuri的回答你还需要检查Activity是否可见意味着它在前台。由于您将从GCM收到通知,因此您需要打开与该服务的连接,并让服务知道该活动是可见的。当活动为Visible时,不发布通知而是将数据从服务传递到活动或在数据库中静默插入并向活动发送一些广播,指示新数据已在db中更新,请查询最新消息。

答案 1 :(得分:1)

在某处存储错过的通知数量(例如SharedPreferences)。您可以继续增加此值,直到用户单击(或滑动)通知。使用setDeleteIntent()调用将在取消通知时重置此存储值的组件。