2014-09-20 99 views
1

我想使用AlarmManager使用来自我的GUI的输入安排闹钟。作为一个例子,我想让闹钟在18点15分起火,所以我有2个int变量表示小时和分钟。我试图用SimpleDateFormat解析它们,但它似乎不工作。任何想法为什么?使用AlarmManager在Android上使用给定时间安排闹钟

编辑:问题是,报警似乎没有触发。我猜这是因为自卫队没有做我想做的事情。但我不知道该如何解决它。

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

你得到的错误是什么? – 2014-09-20 16:58:52

+0

没有错误,它根本没有做任何事情... – Marcus 2014-09-20 17:27:25

+0

你有没有尝试倒数计时器? – Jamil 2014-09-20 17:41:06

回答

1

你正在做的,要设置从当前时间报警18小时15分钟,而不是到今天的18.15方式。

解决这个问题的一种方法是用当前时间创建一个Date,但使用所需的小时和分钟值。然后,只需在该日期设置闹钟。像这样:

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时发出警报。设置已经过去的日期时要小心。确保你在将来设定时间。

+0

这解决了我的问题。但让我们说,如果我的当地时间是22:00,并且我为00:15设置了闹钟,那么这个解决方案仍然可以工作,还是会在同一天将它“翻译”到00:15,因此无法工作? – Marcus 2014-09-20 18:28:11

+0

是的,第二种情况会发生,警报将立即启动。请Upvote /接受我的答案,如果它帮助你。 – joao2fast4u 2014-09-20 18:43:03

+0

如何解决第二种情况下的问题? – Marcus 2014-09-20 18:57:21