Android更新通知并检测它何时不再存在

时间:2015-03-05 16:44:11

标签: java android notifications

我可以创建通知。目前,当用户收到朋友请求时,它会显示"来自某个用户名"的新朋友请求。但是,如果用户收到多个好友请求,我想更新文本以说出“#34;新朋友请求”。"

根据我的理解,我只需要使用我用来创建初始通知的相同Builder对象来更改文本。

我的想法是创建一个HashMap,将NotificationManager' s notify( int id, Builder builder )中使用的所有ID映射到Builder对象。

点击通知后,通知会消失(由于我使用了setAutoCancel(true)),但是,我不知道如何检测到这一点,因此我也可以从HashMap中删除Builder对象

我想删除Builder对象的原因是因为当HashMap的get(id)方法返回null时,我知道要显示"新朋友请求来自"而不是"新朋友请求"。

如果我的算法过于复杂,请务必纠正我。否则,如何检测通知何时被取消?

旁注:我打算为消息和其他类型的通知做同样的事情。

如果需要,这是我创建通知的函数(id现在是硬编码的):

private void triggerNotification(String content, Context context) {

    Log.i("Thread", "notification triggered");

    NotificationCompat.Builder builder =
            new NotificationCompat.Builder(context)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle("Anime Chatter")
            .setContentText( content );

    builder.setAutoCancel( true );

    Intent i = new Intent(context, Friends.class);
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, i, 0);
    builder.setContentIntent(contentIntent);

    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService( Context.NOTIFICATION_SERVICE );

    mNotificationManager.notify( 1010, builder.build());
}

2 个答案:

答案 0 :(得分:1)

最明确的方法是创建一个专门的表来处理通知。

这可能是太多的工作,但它是最大的应用程序处理通知的方式 - 已经看过,哪些没有等等。

对于一个更简单的方法,只需在活动中添加一些代码,在处理意图时,跟踪以持久方式点击的最后一个通知(SharedPrefs?),以便无论控制器调度通知,都知道是否应该有更多不是一个通知被看到(例如,如果用户在没有点击的情况下解除通知,则仍然有多个他不知道的朋友请求)。此控制器还应跟踪上次发送的通知(SharedPrefs再次)。这样,当控制器调度通知时,它可以比较最后发送的和最后一次发送的,并查看是否只有一个或几个。

似乎很直接给我。如果需要,可以帮助您使用代码。

答案 1 :(得分:1)

您正在寻找的是Notification.Builder#setDeleteIntent(PendingIntent)。

当用户取消通知时,将触发您在此处设置的待处理意图(您应该包装广播意图)。您可以响应广播并更新持久存储(数据库,共享首选项等),以便跟踪活动通知,以确定下一个进入时应显示的内容。