取消通知Android Java

如何解决取消通知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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?