나는 이러한 문제를 어떻게 구현할 수 있는지 예제를 검색했지만 내 문제를 해결할 수있는 것을 찾을 수 없으므로 해결 방법에 대한 조언을 요청합니다.두 날짜 사이의 알람 반복
두 개의 지정된 날짜 사이의 특정 시간에 매일 발생하는 경보를 구현해야합니다.
지금은 반복 경보가 특정 시간에 매일 발사하지만 반복 할 때까지 지정하지 않은까지...
어떤 조언과 아이디어가 높게 평가 될 것이다!
나는 이러한 문제를 어떻게 구현할 수 있는지 예제를 검색했지만 내 문제를 해결할 수있는 것을 찾을 수 없으므로 해결 방법에 대한 조언을 요청합니다.두 날짜 사이의 알람 반복
두 개의 지정된 날짜 사이의 특정 시간에 매일 발생하는 경보를 구현해야합니다.
지금은 반복 경보가 특정 시간에 매일 발사하지만 반복 할 때까지 지정하지 않은까지...
어떤 조언과 아이디어가 높게 평가 될 것이다!
repeating
Alarm
을 Date1
에서 Date2
으로 설정한다고 가정합니다.
Date1
의 경우 작동 중이므로 아무런 문제가 없습니다.
Date2
에 alarm
을 설정하고 해당 알람이 울릴 때 Date1
알람을 반복 취소합니다.
나는 이런 식으로 작업을 수행합니다
은 처음 두 시간 (예 : 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
질문하는 경우 제공된 답변에 대해 댓글/거부/수락하는 것이 예의입니다. – electricSunny