我从活动A设置了警报,然后在活动BI中可以删除并更新活动A中的警报设置。更新警报正在运行但删除没有,我已经尝试了一些答案,但似乎没有任何工作
我像这样设置警报。
public void Alarms() {
for(eventlist_model model:arrayList)
{
int id=model.getEvent_id();
String type=model.getEvent_type();
String date=model.getEvent_date();
String time=model.getEvent_time();
String note=model.getEvent_note();
SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd HH:mm");
try{
String sched=date+" "+time;
Date newSched=format.parse(sched);
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(newSched);
if (calendar1.before(calendar))
calendar1.add(Calendar.DATE, 1);
Intent intent = new Intent(this, events_receiver.class).setAction("Dog_alarm");
intent.putExtra("type", type);
intent.putExtra("note", note);
intent.putExtra("id", id);
PendingIntent dog1 = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
final AlarmManager alarm1 = (AlarmManager) getSystemService(ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= 19) {
alarm1.setExact(AlarmManager.RTC_WAKEUP, calendar1.getTimeInMillis(), dog1);
} else {
alarm1.set(AlarmManager.RTC_WAKEUP, calendar1.getTimeInMillis(), dog1);
}
}catch (Exception e)
{
e.printStackTrace();
}
}
}
然后在活动B中我用它来取消闹钟
public void cancelTask()
{ int id=Integer.valueOf(eventid);
Intent intent = new Intent(update_task.this, events_receiver.class);
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
PendingIntent task = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarm.cancel(task);
}
但是它不起作用而且我被困在这里。任何人都可以帮助我吗?
答案 0 :(得分:0)
根据AlarmManager
的{{3}}方法的文档:
取消取消(PendingIntent操作)
删除具有匹配Intent的所有警报。任何类型的警报, 其Intent与此Intent匹配(由filterEquals(Intent)定义), 将被取消。
这意味着,如果intentA
检测到与intentB
相等,则使用filterEqauls
方法,即intentA.filterEquals(intentB)==true
,则可以使用intentB
在alarmanger中取消已在alarmManager中设置的intentA
。
cancel文档通知:
boolean filterEquals(Intent other)
为了意图的目的,确定两个意图是否相同 分辨率(过滤)。也就是说,如果他们的行动,数据,类型,类, 和类别是一样的。这不会比较任何额外的数据 包含在意图中。
这意味着filterEquals
并不关心意图内部的额外内容来比较它们,但像Action
这样的其他参数应该完全相同。
在您的情况下,您错过了取消意图中的setAction
。
因此,您应该像这样更改cancelTask
方法:
public void cancelTask()
{ int id=Integer.valueOf(eventid);
Intent intent = new Intent(update_task.this, events_receiver.class);
intent.setAction("Dog_alarm");//<--- this is missed
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
PendingIntent task = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarm.cancel(task);
}