2013-04-24 2 views
0

나는 이러한 문제를 어떻게 구현할 수 있는지 예제를 검색했지만 내 문제를 해결할 수있는 것을 찾을 수 없으므로 해결 방법에 대한 조언을 요청합니다.두 날짜 사이의 알람 반복

두 개의 지정된 날짜 사이의 특정 시간에 매일 발생하는 경보를 구현해야합니다.

지금은 반복 경보가 특정 시간에 매일 발사하지만 반복 할 때까지 지정하지 않은까지

...

어떤 조언과 아이디어가 높게 평가 될 것이다!

+0

질문하는 경우 제공된 답변에 대해 댓글/거부/수락하는 것이 예의입니다. – electricSunny

답변

0

repeatingAlarmDate1에서 Date2으로 설정한다고 가정합니다.
Date1의 경우 작동 중이므로 아무런 문제가 없습니다.
Date2alarm을 설정하고 해당 알람이 울릴 때 Date1 알람을 반복 취소합니다.

0

나는 이런 식으로 작업을 수행합니다

은 처음 두 시간 (예 : 0100-0500) 사이에 '임의의'시간에 트리거, 당신은 반복 알람을 설정하고 싶었 말할 수 있습니다 하루에 한 다음 항상 트리거 24 시간마다 다시 같은 시간에. 이것은 당신이 가야한다

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

, 나는 + 잘라 내 자신의 프로젝트에서 붙여 넣기, 그래서 약간의 오차가있을 수 있습니다 :

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 클래스에 다음과 같은 것이다.

또한 'WidgetProvider'의 onDisabled() 메소드에서 알렘을 취소해야합니다.

고려해야 할 알람을 삭제하는 다른 시나리오가 있습니다. ON BOOT