我可以创建通知。目前,当用户收到朋友请求时,它会显示"来自某个用户名"的新朋友请求。但是,如果用户收到多个好友请求,我想更新文本以说出“#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());
}
答案 0 :(得分:1)
最明确的方法是创建一个专门的表来处理通知。
这可能是太多的工作,但它是最大的应用程序处理通知的方式 - 已经看过,哪些没有等等。
对于一个更简单的方法,只需在活动中添加一些代码,在处理意图时,跟踪以持久方式点击的最后一个通知(SharedPrefs?),以便无论控制器调度通知,都知道是否应该有更多不是一个通知被看到(例如,如果用户在没有点击的情况下解除通知,则仍然有多个他不知道的朋友请求)。此控制器还应跟踪上次发送的通知(SharedPrefs再次)。这样,当控制器调度通知时,它可以比较最后发送的和最后一次发送的,并查看是否只有一个或几个。
似乎很直接给我。如果需要,可以帮助您使用代码。
答案 1 :(得分:1)
您正在寻找的是Notification.Builder#setDeleteIntent(PendingIntent)。
当用户取消通知时,将触发您在此处设置的待处理意图(您应该包装广播意图)。您可以响应广播并更新持久存储(数据库,共享首选项等),以便跟踪活动通知,以确定下一个进入时应显示的内容。