我有一个应用程序,允许设置多个警报,并且它每天重复这些警报,并且工作正常。 我的问题是当我删除一个设置为在凌晨12点被解雇的警报时,第二天它将在凌晨12点被解雇,即使它被删除了!有人知道问题可能在哪里吗?
我正在使用SQLite来存储,检索和删除警报。
这是AlarmManager
的一部分我给每个警报提供了不同的请求代码:
Intent i = new Intent(mContext, Daily_OnAlarmReceiver.class);
i.putExtra(RemindersDbAdapter.KEY_ROWID_DAILY, (long)reminderId);
int Daily_requestCode = reminderId.intValue();
PendingIntent pi = PendingIntent.getBroadcast(mContext, Daily_requestCode, i, PendingIntent.FLAG_CANCEL_CURRENT);
mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);
我也是以同样的方式通知。我给每个通知提供了不同的请求代码。
任何人都知道为什么即使我删除它也会触发警报?
答案 0 :(得分:3)
在cancel()
AlarmManager
Intent intent = new Intent(this, AlarmReceive.class);
PendingIntent sender = PendingIntent.getBroadcast(this,
0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(sender);
答案 1 :(得分:0)
即使您使用的是不同的requestId
值,AlarmManager
cancel()
方法也只会检查您指定的PendingIntent
是否相等。但是,根据documentation,过滤器相等性不依赖于您的额外数据。所以你必须全部取消它们然后遍历你的数据库以将它们添加回去(跳过你要删除的那个)。