Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android alarmmanager立即启动_Android_Alarmmanager - Fatal编程技术网

Android alarmmanager立即启动

Android alarmmanager立即启动,android,alarmmanager,Android,Alarmmanager,我想在mighnight每周每天设置一个警报这是我的代码: int notificationId = getNotificationId(); //it get a random number Context context = rule.context; Intent intent = ((Activity) context).getIntent(); long time = getRuleCalendar().getTimeInMillis(); AlarmManager alarmMana

我想在mighnight每周每天设置一个警报这是我的代码:

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
}
现在我的问题是,一个警报立即启动(现在是在午夜之后,我想今天检查一下),但所有其他警报都在错误的时间启动。
为什么?

如果您过去设置了警报,警报将立即触发。 例如,在您的情况下,您将报警设置为今天的00:00 AM,这通常是今天的过去日期。 因此,您已将闹钟设置为第二天00:00 AM。为此,只需在日历中添加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开始的打盹模式下的背景行为发生了变化,请查看。

阅读警报行为。好的,但是设置单个警报不重复的问题在哪里?我说得对吗?那你怎么每周每天都重复?请解释一下,只有我能找到解决办法。我想在午夜设置一个闹钟(7个闹钟),不重复。第一个警报立即启动,其他警报在错误的时间启动(今天上午8:30)。GetRuleCalendar方法中的calendarDay是什么。发布整个代码,让我知道它是否有效,或者您是否需要任何帮助。Thxi通过在getRuleCalendar()中添加年中的天来设置警报方法和设置此警报:周一至十二月18日00:00:00 GMT+2017年01:00时间:1513551600001周二至十二月12日00:00:00 GMT+2017年01:00时间:151303320001周三至十二月13日00:00:00 GMT+2017年01:00时间:1513119600001至十二月14日00:00 GMT+2017年01:00时间:1513206000001周五至十二月15日00:00:00 GMT+2017年01:00时间:1513292400001周六至十二月16:00:00 GMT+2017年01:00时间:1513378800001 Sun Dec 17 00:00:00 GMT+2017年1:00时间:15134652000001我立即只收到一个警报,如果我更改数据,我没有其他警报。对于防止打瞌睡的情况,我使用setExactAndAllowHileIDLE()设置了闹钟。编辑如果我重新启动手机,我会有一个闹钟,但为什么?