闹钟管理器立即启动

3
我想在每个星期的午夜设置一个闹钟,这是我的代码:

我想在每个星期的午夜设置一个闹钟,这是我的代码:

int notificationId = getNotificationId(); //it get a random number
Context context = rule.context;
Intent intent = ((Activity) context).getIntent();
long time = getRuleCalendar().getTimeInMillis();
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
     notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
     alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time, pendingIntent);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
     alarmManager.setExact(AlarmManager.RTC_WAKEUP, time,pendingIntent);
} else {
  alarmManager.set(AlarmManager.RTC_WAKEUP, time,pendingIntent);
}

public calendar getRuleCalendar(){
    Calendar calSet = Calendar.getInstance();
    calSet.set(Calendar.DAY_OF_WEEK, calendarDay); //calendarDay change by day of weeks
    calSet.set(Calendar.HOUR_OF_DAY, 0);
    calSet.set(Calendar.MINUTE, 0);
    calSet.set(Calendar.SECOND, 0);
    calSet.set(Calendar.MILLISECOND, 1);
    return calSet
}

现在我的问题是一个闹钟立即开始(现在已经过了午夜,这对我来说没问题,我想检查今天),但所有其他闹钟都在错误的时间开始。

为什么?

1
阅读文档以了解闹钟的行为。 - ADM
好的,但问题出在哪里? - fabio
您设置了一个单次闹钟,对吗?那么如何让它每天重复响铃呢?请解释一下,我才能找到解决方案。 - ADM
我想在午夜设置一个每天的闹钟(7个闹钟),不重复。第一个闹钟立即开始,其他闹钟在错误的时间开始(今天08:30)。 - fabio
getRuleCalender方法中的calendarDay是什么?请贴出整段代码。 - ADM
1个回答

2
如果您将闹钟设置在过去,它只会立即触发警报。例如,在您的情况下,您为今天的00:00 AM设置了闹钟,这对于今天始终是过去日期。因此,您已经将闹钟设置为明天的00:00 AM。只需在日历.DAY_OF_YEAR中加1即可。
 public Calendar getRuleCalendar(){
    Calendar calSet = Calendar.getInstance();
    calSet.set(Calendar.HOUR_OF_DAY, 0);
    calSet.set(Calendar.MINUTE, 0);
    calSet.set(Calendar.SECOND, 0);
    calSet.add(Calendar.DAY_OF_YEAR,1);
    calSet.set(Calendar.MILLISECOND, 1);
    return calSet;
}

如果您想设置重复闹钟,您需要查看文档

如果您不了解Android M开始的Doze模式中的后台行为更改,请查看优化Doze和应用程序待机


请告诉我它是否有效,或者您需要任何帮助。谢谢。 - ADM
我通过将DAY_OF_YEAR添加到getRuleCalendar()方法来设置闹钟,并设置这些闹钟: - fabio
2017年12月18日星期一 00:00:00 GMT+01:00 时间:1513551600001 2017年12月12日星期二 00:00:00 GMT+01:00 时间:1513033200001 2017年12月13日星期三 00:00:00 GMT+01:00 时间:1513119600001 2017年12月14日星期四 00:00:00 GMT+01:00 时间:1513206000001 2017年12月15日星期五 00:00:00 GMT+01:00 时间:1513292400001 2017年12月16日星期六 00:00:00 GMT+01:00 时间:1513378800001 2017年12月17日星期日 00:00:00 GMT+01:00 时间:1513465200001 - fabio
我只收到了一个警报,如果我更改数据,就不会有其他警报。为了防止休眠情况,我使用setExactAndAllowWhileIdle()设置了警报,如上所示。 - fabio
如果我重新启动智能手机,为什么会有一个闹钟? - fabio
你只设置了一个闹钟,所以只会收到一个闹钟提醒。你需要使用“设置重复”功能,请查阅文档。如果需要处理重启问题,请参考这篇文章 - ADM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接