在两个日期之间重复警报

时间:2013-04-24 10:58:51

标签: android alarmmanager repeat

我已经搜索了如何实现这样一个问题的例子,但找不到任何可以解决我问题的方法,所以我要求你提出如何解决问题的建议。

我必须在两个指定日期之间的某个特定时间实施每天触发的警报。

到目前为止,我每天都会在特定时间重复发出警报,但在重复之前没有指定......

任何建议和想法都将受到高度赞赏!

2 个答案:

答案 0 :(得分:0)

假设您要将repeating AlarmDate1设置为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