0

我已经搜索了如何实现此类问题的示例,但找不到任何可以解决我的问题的方法,因此我向您寻求解决方法的建议。

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

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

任何建议和想法将不胜感激!

4

2 回答 2

0

假设您要设置repeating AlarmfromDate1Date2
对于Date1,因为它正在工作,所以对您来说没有问题。
设置一个alarmforDate2并在触发该警报时取消Date1重复警报。

于 2013-04-24T11:11:29.693 回答
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);
    }

这应该让你继续,我已经从我自己的项目中剪切+粘贴,所以可能会有一些错误。

另外,请记住在onDisabled()您的 `WidgetProvider.

还有其他情况可以删除您应该考虑的警报,例如 ON BOOT

于 2013-04-24T12:24:22.007 回答