2014-09-20 93 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