【问题标题】:Schedule an alarm with AlarmManager using a given time on android在 android 上使用给定时间使用 AlarmManager 安排警报
【发布时间】:2014-09-20 16:54:33
【问题描述】:

我想使用来自我的 GUI 的输入通过 AlarmManager 安排警报。

例如,我希望闹钟在 18:15 触发,所以我有 2 个表示小时和分钟的 int 变量。我尝试用 SimpleDateFormat 解析它们,但它似乎不起作用。任何想法为什么?

编辑:问题是警报似乎没有触发。我猜这是因为自卫队没有做我想做的事。但我不知道该怎么做。

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);
}

感谢您的帮助。

马库斯

【问题讨论】:

  • 你得到的错误是什么?
  • 没有错误,它根本没有做任何事情......
  • 你试过倒数计时器吗?
  • 我没有,你能详细说明一下吗?

标签: android alarmmanager simpledateformat


【解决方案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 发出警报。小心设置已经过去的日期。确保你设定了未来的时间。

【讨论】:

  • 这解决了我的问题。但是假设我的当地时间是 22:00,并且我将闹钟设置为 00:15,那么这个解决方案是否仍然有效,或者它会在同一天将其“翻译”为 00:15,因此不起作用?
  • 是的,会发生第二种情况,立即启动警报。如果对您有帮助,请点赞/接受我的回答。
  • 您可以将当前日期与定义的日期进行比较。如果日期是未来,就顺其自然吧。如果不是,请在日期上添加一天,以便闹钟在第二天启动。
  • 谢谢,明天试试这个
  • 我想在上午 11 点设置闹钟,现在是下午 6 点,这样可以吗? @马库斯
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多