Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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 当报警时间过去时,如何避免报警触发?_Android_Alarmmanager_Android Pendingintent_Repeatingalarm - Fatal编程技术网

Android 当报警时间过去时,如何避免报警触发?

Android 当报警时间过去时,如何避免报警触发?,android,alarmmanager,android-pendingintent,repeatingalarm,Android,Alarmmanager,Android Pendingintent,Repeatingalarm,我计划每天早上10点触发一个警报 我将此闹钟设置为周一上午12点 如果报警时间已过,则会立即触发报警 但根据我的要求,我不想马上触发。我可以在第二天上午10点触发 下面是我当前设置报警的代码: Calendar activeModeTime = Calendar.getInstance(); // activeModeTime.setTimeZone(TimeZone.getTimeZone(Constants.TIME_ZONE)); activeModeTime.set(Ca

我计划每天早上10点触发一个警报

我将此闹钟设置为周一上午12点

如果报警时间已过,则会立即触发报警

但根据我的要求,我不想马上触发。我可以在第二天上午10点触发

下面是我当前设置报警的代码:

Calendar activeModeTime = Calendar.getInstance();
    // activeModeTime.setTimeZone(TimeZone.getTimeZone(Constants.TIME_ZONE));
    activeModeTime.set(Calendar.HOUR_OF_DAY,
            mSharedPrefManager.getActiveStartHourPref());
    activeModeTime.set(Calendar.MINUTE,
            Constants.DEFAULT_ACTIVE_START_MINUTE);
    activeModeTime.set(Calendar.SECOND,
            Constants.ALL_START_END_DEFAULT_SECOND);

    mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
            activeModeTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
            getActiveModeAlarmPendingIntent());

我如何做到这一点

检查您设置的时间是否为过去,如果为过去,则在触发时间中添加24小时

if(activeModeTime < System.currentTimeMillis()){
    activeModeTime += AlarmManager.INTERVAL_DAY;
}
if(activeModeTime
写入间隔,而不是重复间隔。 对于上面的10 AM示例,您需要编写AlarmManager.INTERVAL\u DAY,而不是在下面的代码中重复\u INTERVAL

if(Calendar.getInstance().getTimeInMillis()>=calendar.getTimeInMillis()){
   timeInMillis = calendar.getTimeInMillis() + REPEATING_INTERVAL;
}else { 
   timeInMillis = calendar.getTimeInMillis();
}

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, timeInMillis,REPEATING_INTERVAL, pendingIntent);

定在后天。我可以定在星期二。。但是下星期一我需要这个闹钟。。。如何做到这一点?只需设置下一个日期。是否有参数可用于设置不触发过去的时间。不,方法
setRepeating()
AlarmManager
中没有重载,因此我们无法为该atm传递参数。此外,API 19及以上的警报也不准确。我正在设备4.4.4中进行测试。我把闹钟定在上午10点。现在是上午10点15分。但警报仍然没有触发。是否有任何具体的延迟时间?当时间过去时,它应该立即触发,但何时停止工作,因为在问题中,您提到“如果警报时间已过,则警报将立即触发。”。确保警报准确触发的一种方法是设置一个一次性警报,并在处理警报传递时安排下一个警报。我也不能设置一次性警报。即使是api 19中的一次性设置方法也不精确。请编辑您的帖子,并在代码中添加一些解释。