安排AlarmManager事件从现在开始几天发生

时间:2013-05-07 20:28:49

标签: android alarmmanager android-pendingintent intentservice

我一直在玩AlarmManager,以便在特定时间段后安排IntentService执行X任务。到目前为止它的效果很好,在这里'我是怎么做的:

public static void scheduleNextRefresh (final Context context, long msFromNow) {

    Constants.logMessage("Scheduling fetcher alarm to happen within: " + msFromNow/(1000*60) + " minutes");

    Intent intent = new Intent(context, AlarmReceiver.class);       
    intent.putExtra(AlarmReceiver.EXTRA_ACTION, AlarmReceiver.FETCH_NEWS);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    if (msFromNow != -1) {
        Constants.logMessage("Alarm set");
        alarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + msFromNow, pendingIntent);
    }               
}

到目前为止,效果很好;但是,我通常只使用30分钟或几小时的小间隔。

现在我想安排一个行动在未来几天发生,我很好奇它是否适用于AlarmManager,或者如果使用其他工具更简单在X时间发送PendingIntent

由于最小的间隔时间是3天,并且可能会有一些重启(我知道我自己每天至少重启一次电话),在此过程中,我不确定{{1}是多么实用} 将会。

首先,调度我正在使用的刷新的逻辑与上面发布的相同,唯一的区别是我添加了更多代码AlarmManager以便侦听BroadcastReceiver并重新启动 - 根据需要安排警报。

android.permission.RECEIVE_BOOT_COMPLETED

我认为可以做到这一点,但我很好奇有一种更好的方法来安排事件发生几天后发生,而不必担心重新安排或其他事件。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

RECEIVE_BOOT_COMPLETED上的重新安排警报是我使用的方法(并且已经工作了2年多)并且进行快速搜索似乎验证了它。 AlarmManager for Android

答案 1 :(得分:0)

重启后警报不会持续存在。您需要在启动时运行以重新安排警报。例如,内置时钟应用程序就是这样做的。

从Android 5.0开始,您可能希望切换到使用JobScheduler机制。有了它们,您不需要处理自己的启动时间执行或唤醒锁或任何东西;你只需指定你想要运行的时间(加上任何其他有趣的约束,比如只想在设备充电时运行),操作系统会在合适的时间运行你。