使用Android上的给定时间使用AlarmManager安排警报

时间:2014-09-20 16:54:34

标签: android alarmmanager simpledateformat

我想使用来自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);
}

感谢任何帮助。

马库斯

1 个答案:

答案 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发出警报。设置已经过的日期时要小心。确保您将来设定一个时间。