Android - 警报管理器每天运行

时间:2016-10-09 15:01:14

标签: android

我不明白什么是错的,但即使我对日期编号进行硬编码,我的警报每天都会运行,我不知道最近会发生什么......

Intent notificationIntent = new Intent(AddTask.this,CustomBroadcastReceiver.class);
notificationIntent.putExtra(Intent.EXTRA_UID,newTaskId);
PendingIntent pendingIntent = PendingIntent.getBroadcast(AddTask.this, newTaskId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager)getSystemService(getApplicationContext().ALARM_SERVICE);

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.DAY_OF_WEEK,2);

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY * 7, pendingIntent);

今天是星期天所以天数是1,我写了calendar.set(Calendar.DAY_OF_WEEK,2);因为我使用了这个时刻的时间和分钟,所以警报刚刚被触发...如果我设置了日期编号1 2 3 4 5或6,或者即使我制作了几个具有相同ID的警报管理器并且每个包含其他警报管理器也没关系它每天都会触发

2 个答案:

答案 0 :(得分:1)

为什么这条线是必要的?

calendar.setTimeInMillis(System.currentTimeMillis());

此外,Android开发documentation建议使用

setInexactRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation);

编辑: 我怀疑没有设置创建警报的意图,因此它没有正确创建警报。 也许这会奏效:

Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
intent, PendingIntent.FLAG_ONE_SHOT);

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
//set repeating alarm here

我希望能回答这个问题。

答案 1 :(得分:0)

所以我已经解决了这个问题,对于想要创建这样的警报应用程序的所有人来说,>你设置时间和小时以及触发闹钟的星期几,它的工作方式如下:如果今天是您选择的那一天,您只需设置闹钟:

calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);

但是,如果您选择的那天不是今天的那一天,那么您必须在您选择的最近一天的日期,然后如上所述设置额外的小时和分钟。

这是让它发挥作用的唯一方法