如何解决取消通知Android Java
我开始使用Notifications,为了提高用户的使用体验,我在通知“ MARK AS READ”中添加了按钮,因此当按下它时-消息将隐藏;
我遇到了一些问题,在数据库中,每条消息都具有布尔值的“ read”字段,在方法onDataChange()中,我循环检查是否有任何消息具有此字段,如果我调用makeNotification(),则为false很好,哪里出了问题??? -e.x.我有2条通知,我取消了一个(应用程序进入数据库并将字段更改为true,所以现在将调用onDataChange()),但另一个通知未被取消,因为onDataChange()已被调用,所以我有两次相同的通知.....
我试图通过构建已读取并已显示的消息数组来解决此问题,这不是我认为的最佳解决方案,但是即使以前的问题也以某种方式得以解决,这是一个很奇怪的问题。 当通知列表中显示通知时,它具有“标记为已读”按钮,当我按该按钮时,通知隐藏,但仅当我从最高到较低时才显示,因此如果我按第二个通知的第一折,如果我按第三个折的通知..
在onCreate()中,计数器设置为1;
public void makeNotification()
{
Intent activityIntent = new Intent(this,Notifications.class);
PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(),activityIntent,0);
Intent broadcastIntent = new Intent(getApplicationContext(),NotifUpdater.class);
broadcastIntent.putExtra("seconds",message.getSeconds());
broadcastIntent.putExtra("id",String.valueOf(counter));
PendingIntent actionIntent = PendingIntent.getbroadcast(this,broadcastIntent,PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new NotificationCompat.Builder(this,App.CHANNEL_ID)
.setVibrate(new long[]{100,100})
.setSmallIcon(R.drawable.ic_shield)
.setContentTitle(message.getTime() + " | " + message.getClient())
.setContentText(message.getMessage())
.setContentIntent(contentIntent)
.setAutoCancel(true)
.setonlyAlertOnce(true)
.addAction(0,"MARK AS READ",actionIntent)
.build();
notificationmanager.notify(counter,notification);
counter += 1;
}
// broadcast which is triggered by pressing button
public class NotifUpdater extends broadcastReceiver {
@Override
public void onReceive(Context context,Intent intent) {
FirebaseDatabase database = FirebaseDatabase.getInstance();
String seconds = intent.getStringExtra("seconds");
int id = Integer.parseInt(intent.getStringExtra("id"));
database.getReference("latest").child(seconds).child("read").setValue(true);
notificationmanager notificationmanager = (notificationmanager) context.getSystemService(context.NOTIFICATION_SERVICE);
notificationmanager.cancel(id);
}
}
解决方法
关于您的第一个问题,我只是为每个通知设置了一个指示器,“ wasShown”或仅在您显示通知后以及每次迭代通知时才显示为true的某种指示那些将“ wasShown”设置为false的人。
关于第二个问题,我对FirebaseDatabase并不熟悉,但这听起来像是一个ID问题。您是否确定从意图中获得的ID是正确的ID?
,您应该具有:FLAG_CANCEL_CURRENT
就像:
PendingIntent actionIntent = PendingIntent.getBroadcast(this,NOTIFICATION_ID,buttonIntent,PendingIntent.FLAG_CANCEL_CURRENT);
不是FLAG_UPDATE_CURRENT
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。