2013-04-24 100 views
0

我搜索瞭如何實現這樣的問題,但找不到任何可以解決我的問題的例子,所以我問你一個建議如何解決它。重複在兩個日期之間的警報

我必須在兩個指定日期之間的某個特定時間段內實施每天發生的報警。

到現在爲止我已經重複鬧鐘每天燒在特定的時間,但直到當重複沒有指定...

任何意見和想法,將不勝感激!

+0

如果您提出問題,請提供評論/拒絕/接受。 – electricSunny 2013-05-09 06:56:38

回答

0

假設您想將repeatingAlarmDate1設置爲Date2
對於Date1,因爲它正在工作,所以你沒有問題。
設置alarmDate2,當發出警報時取消Date1重複發生警報。

0

我不喜歡這樣寫道:

比方說,你想設置重複報警,即前兩個小時(例如0100 - 0500)之間觸發在「隨機」的時間在一天,然後總是觸發在每天24小時的同一時間。

private long getTimeOfNextWidgetAutoUpdateInMilliseconds(Calendar now, int startHour, int endHour){ 
    // calc the time diff in milliseconds from now until a 'random' time between startHour and endHour 
    // ensure to +1 day if the time has already passed 
} 

private void createAutoRefreshAlarm(Context context, long initialTriggerTimeInMillis, 
      long intervalInMillis) { 
     AlarmManager alarmManager = getAlarmManager(context); 
     PendingIntent widgetRefreshPi = getWidgetRefreshAlarmPendingIntent(context); 
     setRepeatingAlarm(initialTriggerTimeInMillis, intervalInMillis, widgetRefreshPi, 
       alarmManager); 

     ApplicationData.setAppDataBoolean(WIDGET_REFRESH_ALARM_SERVICE_INITITATED, true); 
    } 

    private static void setRepeatingAlarm(long initialTriggerTimeInMillis, long intervalInMillis, 
      PendingIntent widgetRefreshPi, AlarmManager alarmManager) { 
     alarmManager.setRepeating(
       AlarmManager.RTC_WAKEUP, 
       initialTriggerTimeInMillis, 
       intervalInMillis, 
       widgetRefreshPi); 
    } 

private PendingIntent getWidgetRefreshAlarmPendingIntent(Context context) { 
     Intent alarmIntent = new Intent(context, AlarmManagerBroadcastReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     return pendingIntent; 
    } 

private static AlarmManager getAlarmManager(Context context) { 
     AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     return alarmManager; 
    } 

我將不得不在WidgetProvider類以下內容:

@Override 
    public void onEnabled(Context context) { 
     super.onEnabled(context); 

     int startHour = 1; 
     int endHour = 5; 
     long initialTriggerTimeInMillis = getTimeOfNextWidgetAutoUpdateInMilliseconds(
       Calendar.getInstance(), 
       startHour, 
       endHour); 

     long intervalInMillis = 86400000; // 24 hours 
     createAutoRefreshAlarm(context, initialTriggerTimeInMillis, intervalInMillis); 
    } 

這應該讓你去,我剪+從我自己的項目粘貼,所以可能會有一些錯誤。

此外,請記住取消您的`WidgetProvider的onDisabled()方法中的alram。

還有其他一些情況可以刪除您應該考慮的警報,例如, ON BOOT