我已经搜索了如何实现这样一个问题的例子,但找不到任何可以解决我问题的方法,所以我要求你提出如何解决问题的建议。
我必须在两个指定日期之间的某个特定时间实施每天触发的警报。
到目前为止,我每天都会在特定时间重复发出警报,但在重复之前没有指定......
任何建议和想法都将受到高度赞赏!
答案 0 :(得分:0)
假设您要将repeating
Alarm
从Date1
设置为Date2
。
Date1
,因为它有效,所以没有问题
为alarm
设置Date2
,当该警报触发时,取消Date1
重复警报。
答案 1 :(得分: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