Android 如何防止警报在启动时运行经过的时间
我有一个带有RTC警报的应用程序。目前,我将闹钟设置为每天早上8点点火。我的问题是,当警报开始时(下午4点),它将考虑开始时间(8AM)已经过去,因此将运行。Android 如何防止警报在启动时运行经过的时间,android,alarmmanager,Android,Alarmmanager,我有一个带有RTC警报的应用程序。目前,我将闹钟设置为每天早上8点点火。我的问题是,当警报开始时(下午4点),它将考虑开始时间(8AM)已经过去,因此将运行。 我希望闹钟只在早上8点左右响,但是如果它在一天的晚些时候启动,就不会响。你知道怎么做吗?你正在使用setInexactRepeating或setRepeating,对吗?因此,要处理这种情况,只需比较2次:当前时间(毫秒)和(上午8点,当天)毫秒。如果第一次超过第二次,则应在(第二天上午8点)触发警报,如果不是-(当天上午8点)。您使用的
我希望闹钟只在早上8点左右响,但是如果它在一天的晚些时候启动,就不会响。你知道怎么做吗?你正在使用
setInexactRepeating
或setRepeating
,对吗?因此,要处理这种情况,只需比较2次:当前时间(毫秒)和(上午8点,当天)毫秒。如果第一次超过第二次,则应在(第二天上午8点)触发警报,如果不是-(当天上午8点)。您使用的是setInexactRepeating
或setRepeating
,对吗?因此,要处理这种情况,只需比较2次:当前时间(毫秒)和(上午8点,当天)毫秒。如果第一次超过第二次,则应在(第二天上午8点)触发警报,如果不是(当天上午8点)。我建议您使用tocalendar.add(calendar.day\u OF年,1)代码>
研究以下代码:
Calendar calendar = Calendar.getInstance();
// 9 AM
calendar.add(Calendar.DAY_OF_YEAR, 1); ///to avoid firing the alarm immediately
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
PendingIntent pi = PendingIntent.getService(context, 0,
new Intent(context, MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pi);
我建议您使用tocalendar.add(calendar.DAY/u OF/u YEAR,1)代码>
研究以下代码:
Calendar calendar = Calendar.getInstance();
// 9 AM
calendar.add(Calendar.DAY_OF_YEAR, 1); ///to avoid firing the alarm immediately
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
PendingIntent pi = PendingIntent.getService(context, 0,
new Intent(context, MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pi);
在我的例子中,如果时间还没有过去,我想在当天发出警报,所以我需要稍微改进Lucifer的回答
void setTheAlarm(int hour, int minute)
{
SettingsData.TriggerTime triggerTime = common.settingsData.getDeviceParamInfo().getConnectionTime();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
if(System.currentTimeMillis() > calendar.getTimeInMillis())
{
calendar.add(Calendar.DAY_OF_YEAR, 1); ///to avoid firing the alarm immediately
}
// With setInexactRepeating(), you have to use one of the AlarmManager interval
// constants--in this case, AlarmManager.INTERVAL_DAY.
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, alarmIntent);
Log.i("setTheAlarm", String.format("Alarm is set to %02d:%02d", hour, minute));
}
在我的例子中,如果时间还没有过去,我希望警报在当天发出,所以我需要稍微改进Lucifer的回答
void setTheAlarm(int hour, int minute)
{
SettingsData.TriggerTime triggerTime = common.settingsData.getDeviceParamInfo().getConnectionTime();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
if(System.currentTimeMillis() > calendar.getTimeInMillis())
{
calendar.add(Calendar.DAY_OF_YEAR, 1); ///to avoid firing the alarm immediately
}
// With setInexactRepeating(), you have to use one of the AlarmManager interval
// constants--in this case, AlarmManager.INTERVAL_DAY.
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, alarmIntent);
Log.i("setTheAlarm", String.format("Alarm is set to %02d:%02d", hour, minute));
}
好主意,但是你确定吗,如果你写的代码在晚上11:00运行,它仍然会被称为明天早上9:00?只是增加1天给我的印象是,这将是一个完整的延迟1天day@MahmoudBadri是的,我100%确定,我已经用那行代码测试了这段代码。好的,我接受这个答案,因为它更简单,虽然nikis的答案更准确,但在我的情况下,我想要一个更简单更聪明的想法,但是你确定,如果你编写的代码在晚上11:00运行,明天早上9:00还叫吗?只是增加1天给我的印象是,这将是一个完整的延迟1天day@MahmoudBadri是的,我100%确定,我已经用那行代码测试了这段代码。好的,我接受这个答案,因为它更简单,虽然nikis的答案更准确,但在我的情况下,我希望更简单