我已经搜索了如何实现此类问题的示例,但找不到任何可以解决我的问题的方法,因此我向您寻求解决方法的建议。
我必须实现一个在两个指定日期之间的特定时间每天触发的警报。
到目前为止,我每天都会在特定时间重复发出警报,但直到何时重复才指定......
任何建议和想法将不胜感激!
我已经搜索了如何实现此类问题的示例,但找不到任何可以解决我的问题的方法,因此我向您寻求解决方法的建议。
我必须实现一个在两个指定日期之间的特定时间每天触发的警报。
到目前为止,我每天都会在特定时间重复发出警报,但直到何时重复才指定......
任何建议和想法将不胜感激!
假设您要设置repeating
Alarm
fromDate1
到Date2
。
对于Date1
,因为它正在工作,所以对您来说没有问题。
设置一个alarm
forDate2
并在触发该警报时取消Date1
重复警报。
我这样做:
假设您想设置一个重复警报,它首先在一天中两个小时之间的“随机”时间触发(例如 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);
}
这应该让你继续,我已经从我自己的项目中剪切+粘贴,所以可能会有一些错误。
另外,请记住在onDisabled()
您的 `WidgetProvider.
还有其他情况可以删除您应该考虑的警报,例如 ON BOOT