如果选择的时间已经过去,如何在第二天设置闹钟
How to set alarm at next day if chosen time already gone
如果选择的时间已经过去了,如何设置第二天的闹钟?
我得到了设置闹钟的方法,但如果那个时间已经过去,它就会发生。我需要在第二天启用此警报。我该如何更改此代码? '因为此代码不起作用:警报立即响起
Calendar calendar = Calendar.getInstance();
long now = calendar.getTimeInMillis();
sharedPreferences = getPreferences(MODE_PRIVATE);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
long until = calendar.getTimeInMillis();
calendar.set(Calendar.HOUR_OF_DAY, sharedPreferences.getInt(SAVED_HOUR_1, selected_hour_1));
calendar.set(Calendar.MINUTE, sharedPreferences.getInt(SAVED_MINUTE_1, selected_minute_1));
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
long seted = calendar.getTimeInMillis();
Intent intent = new Intent(getApplicationContext(), SetVolume_1.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 23, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, seted, AlarmManager.INTERVAL_DAY, pendingIntent);
} else {
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, seted, AlarmManager.INTERVAL_DAY, pendingIntent);
}
这很简单,因为你有一个日历实例,当你想要设置闹钟时,只需获取它的时间以毫秒为单位并与现在比较,如果它更大则时间尚未到达,否则您只需要在同一日历中添加一天。我认为实现非常简单:)。
编辑
我实际上不得不做类似的事情,这是我的代码,您可以根据需要调整它,它应该可以帮助您理解这个问题。
fun setAlarm(context: Context, interval: Long) {
val am = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val i = Intent(context, AlarmReceiver::class.java)
val pi = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT) //Flag Update Current FLAG_CANCEL_CURRENT
val prefTime = PreferenceManager.getDefaultSharedPreferences(context).getString(SettingsValues.NOTIFICATION_TIME_KEY, "1").toInt()
val calendar = Calendar.getInstance()
calendar.set(Calendar.HOUR_OF_DAY, prefTime)
calendar.set(Calendar.SECOND, 0)
calendar.set(Calendar.MINUTE, 0)
var time = calendar.timeInMillis
if (System.currentTimeMillis() > time) {
time = time + 24 * 60 * 60 * 1000 // Next day
}
am.setRepeating(AlarmManager.RTC_WAKEUP,
time , AlarmManager.INTERVAL_DAY, pi);
isActive = true
}
重要 如果你看一下我是如何使用日历实例的,你的答案应该在那里。如果现在是在以毫秒为单位的日历总时间之后,我会添加一整天。
要设置第二天的闹钟,您可以在设置时间时添加:
calendar.set(Calendar.DATE, 1);
要轻松检查当天时间是否已经过去,如果已经过去则只设置为第二天,这样检查:
if(calendar.before(System.currentTimeMillis())){
calendar.set(Calendar.DATE, 1);
}
如果设置的时间在当天已经过去,这只会将日历时间设置为第二天。
如果选择的时间已经过去了,如何设置第二天的闹钟? 我得到了设置闹钟的方法,但如果那个时间已经过去,它就会发生。我需要在第二天启用此警报。我该如何更改此代码? '因为此代码不起作用:警报立即响起
Calendar calendar = Calendar.getInstance();
long now = calendar.getTimeInMillis();
sharedPreferences = getPreferences(MODE_PRIVATE);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
long until = calendar.getTimeInMillis();
calendar.set(Calendar.HOUR_OF_DAY, sharedPreferences.getInt(SAVED_HOUR_1, selected_hour_1));
calendar.set(Calendar.MINUTE, sharedPreferences.getInt(SAVED_MINUTE_1, selected_minute_1));
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
long seted = calendar.getTimeInMillis();
Intent intent = new Intent(getApplicationContext(), SetVolume_1.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 23, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, seted, AlarmManager.INTERVAL_DAY, pendingIntent);
} else {
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, seted, AlarmManager.INTERVAL_DAY, pendingIntent);
}
这很简单,因为你有一个日历实例,当你想要设置闹钟时,只需获取它的时间以毫秒为单位并与现在比较,如果它更大则时间尚未到达,否则您只需要在同一日历中添加一天。我认为实现非常简单:)。
编辑 我实际上不得不做类似的事情,这是我的代码,您可以根据需要调整它,它应该可以帮助您理解这个问题。
fun setAlarm(context: Context, interval: Long) {
val am = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val i = Intent(context, AlarmReceiver::class.java)
val pi = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT) //Flag Update Current FLAG_CANCEL_CURRENT
val prefTime = PreferenceManager.getDefaultSharedPreferences(context).getString(SettingsValues.NOTIFICATION_TIME_KEY, "1").toInt()
val calendar = Calendar.getInstance()
calendar.set(Calendar.HOUR_OF_DAY, prefTime)
calendar.set(Calendar.SECOND, 0)
calendar.set(Calendar.MINUTE, 0)
var time = calendar.timeInMillis
if (System.currentTimeMillis() > time) {
time = time + 24 * 60 * 60 * 1000 // Next day
}
am.setRepeating(AlarmManager.RTC_WAKEUP,
time , AlarmManager.INTERVAL_DAY, pi);
isActive = true
}
重要 如果你看一下我是如何使用日历实例的,你的答案应该在那里。如果现在是在以毫秒为单位的日历总时间之后,我会添加一整天。
要设置第二天的闹钟,您可以在设置时间时添加:
calendar.set(Calendar.DATE, 1);
要轻松检查当天时间是否已经过去,如果已经过去则只设置为第二天,这样检查:
if(calendar.before(System.currentTimeMillis())){
calendar.set(Calendar.DATE, 1);
}
如果设置的时间在当天已经过去,这只会将日历时间设置为第二天。