gpt4 book ai didi

java - 使用 AlarmManager 设置一些通知并取消其中之一

转载 作者:行者123 更新时间:2023-12-02 00:55:42 26 4
gpt4 key购买 nike

在我的程序中,我设置了带有字符串及其时钟的通知,以在其时钟处获取带有该字符串的通知。(我的意思是用户希望在要求的时间收到带有字符串的通知,并且用户给了我很多字符串和他们的时钟。)如果用户想取消该通知,我不知道该怎么做。

我尝试了alarmManager.cancel(pendingIntent),但我想取消唯一的一个通知,而不是全部。此外,它也不会取消任何通知。

这里是main中的代码

public void gecikmeliGoster(String plan, int yil, int ay, int gun, String saat){

NotificationCompat.Builder builder;

NotificationManager bildirimYoneticisi = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

Intent ıntent = new Intent(HatirlaticiKur.this, AlarmReciever.class);

PendingIntent gidilecekIntent = PendingIntent.getActivity(this, 1, ıntent, PendingIntent.FLAG_UPDATE_CURRENT);


if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
String kanalId = "kanalId";
String kanalAd = "kanalAd";
String kanalTanım = "kanalTanım";
int kanalOnceligi = NotificationManager.IMPORTANCE_HIGH;

NotificationChannel kanal = bildirimYoneticisi.getNotificationChannel(kanalId);

if (kanal == null) {
kanal = new NotificationChannel(kanalId, kanalAd, kanalOnceligi);
kanal.setDescription(kanalTanım);
bildirimYoneticisi.createNotificationChannel(kanal);
}

builder = new NotificationCompat.Builder(this, kanalId);

builder.setContentTitle("Hatırlatıcı")
.setContentText(plan)
.setSmallIcon(R.drawable.hatirlatici)
.setAutoCancel(true)
.setContentIntent(gidilecekIntent);
} else {

builder = new NotificationCompat.Builder(this);

builder.setContentTitle("Hatırlatıcı")
.setContentText(plan)
.setSmallIcon(R.drawable.hatirlatici)
.setContentIntent(gidilecekIntent)
.setAutoCancel(true)
.setPriority(Notification.PRIORITY_HIGH);
}
Intent broadcastIntent = new Intent(HatirlaticiKur.this, AlarmReciever.class);

broadcastIntent.putExtra("nesne", builder.build());

PendingIntent gidilecekBroadcast = PendingIntent.getBroadcast(this, 0, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);

//long gecikme = SystemClock.elapsedRealtime() + 5000; //bu 5 saniyede bir bildirim gelmesi için falan
String[] noktasiz = saat.split(":");
int akrep = Integer.parseInt(noktasiz[0]);
int yelkovan = Integer.parseInt(noktasiz[1]);

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.YEAR, yil);
calendar.set(Calendar.MONTH, ay);
calendar.set(Calendar.DATE, gun);
calendar.set(Calendar.HOUR_OF_DAY, akrep);
calendar.set(Calendar.MINUTE, yelkovan);
calendar.set(Calendar.SECOND, 0);

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 0, gidilecekBroadcast);

}

这是 AlarmReceiver 中的代码

public class AlarmReciever extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

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

Notification bildirim = intent.getParcelableExtra("nesne");

bildirimYoneticisi.notify(1,bildirim);

}



}

我想取消要求通知,我将感谢您的帮助

最佳答案

使用已使用的 0 id 设置警报

 PendingIntent gidilecekBroadcast = PendingIntent.getBroadcast(this, 0, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);

使用 Alarmmanager 设置的所有通知都需要唯一 ID然后根据uniqueid你可以取消闹钟

PendingIntent gidilecekBroadcast  = 
PendingIntent.getBroadcast(getApplicationContext(), uniqueid , broadcastIntent,
PendingIntent.FLAG_UPDATE_CURRENT)
alarmManager.cancel(gidilecekBroadcast);

关于java - 使用 AlarmManager 设置一些通知并取消其中之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57820786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com