我想使用来自GUI的输入,使用AlarmManager安排闹钟。
作为一个例子,我希望闹钟在18:15发射,所以我有2个int变量代表小时和分钟。我尝试使用SimpleDateFormat解析它们,但它似乎不起作用。有什么想法吗?
编辑:问题是警报似乎没有触发。我猜它是因为SDF并没有做我想做的事情。但我不知道如何解决它。
public void setAlarm(){
int hour = 18;
int minute = 15;
String myTime = String.valueOf(hour) + ":" + String.valueOf(minute);
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
try {
date = sdf.parse(myTime);
} catch (ParseException e) {
e.printStackTrace();
}
if (date != null) {
timeInMs = date.getTime() + System.currentTimeMillis();
}
Intent intent = new Intent(this, AlarmClockRingRing.class);
PendingIntent action = PendingIntent.getActivity(this, 0,intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, timeInMs, action);
}
感谢任何帮助。
马库斯
答案 0 :(得分:1)
按照您的方式,您将闹钟设置为距离当前时间18小时15分钟,而不是当天的18.15分钟。
您可以解决此问题的一种方法是使用当前时间创建日期,但使用所需的小时和分钟值。然后在该日期设置闹钟。像这样:
public void setAlarm(){
int hour = 18;
int minute = 15;
String myTime = String.valueOf(hour) + ":" + String.valueOf(minute);
Date date = null;
// today at your defined time Calendar
Calendar customCalendar = new GregorianCalendar();
// set hours and minutes
customCalendar.set(Calendar.HOUR_OF_DAY, hour);
customCalendar.set(Calendar.MINUTE, minute);
customCalendar.set(Calendar.SECOND, 0);
customCalendar.set(Calendar.MILLISECOND, 0);
Date customDate = customCalendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm", Locale.getDefault());
try {
date = sdf.parse(myTime);
} catch (ParseException e) {
e.printStackTrace();
} catch (java.text.ParseException e) {
e.printStackTrace();
}
if (date != null) {
timeInMs = customDate.getTime();
}
Intent intent = new Intent(this, AlarmClockRingRing.class);
PendingIntent action = PendingIntent.getActivity(this, 0,intent, Intent.FLAG_ACTIVITY_NEW_TASK);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, timeInMs, action);
}
此代码将于当天18.15发出警报。设置已经过的日期时要小心。确保您将来设定一个时间。