android - 如何在 Android 运行时更改 AlarmManager 的重复间隔

标签 android

我编写了以下 AlarmManager 来启动一个 Service,它将在指定的时间间隔下载文件:

    Calendar updateTime = Calendar.getInstance();
    updateTime.setTimeZone(TimeZone.getDefault());
    updateTime.set(Calendar.HOUR_OF_DAY, 7);
    Intent downloader = new Intent(mActivity, FileDownloadService.class);
    downloader.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(mActivity, 0, downloader, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, updateTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

从应用程序的另一部分,我获得了运行 Service 的重复间隔值。重复间隔的值每天都在变化。

我们如何在运行时更改 AlarmManager 间隔,因为上面的代码只会执行一次?

例如,在第 1 天,我希望重复间隔为 15 分钟,而在第 2 天,我希望重复间隔为 2 小时。

如何动态更改重复间隔?

最佳答案

将值 15 分钟作为额外存储在您的未决 Intent 中。当您的代码被警报管理器触发时,获取当前值,根据您的需要增加它并重置保存该值的 Intent 中的额外值。

编辑:使用 alarmManager.set(int type, long triggerAtMillis, PendingIntent operation);在每次新调用您的代码时。

关于android - 如何在 Android 运行时更改 AlarmManager 的重复间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30136288/

相关文章:

java - 从圆环图中获取系列 - achartengine

java - Firebase Firestore : Document is not mapping to Model class

java - 如何在每次调用方法时获得大量的随机整数?

android - 从 Android 中的过渡动画中排除 BottomNavigation

android - 如果应用程序处于 Activity 状态,则无法在 channel 上发布通知

android - 如何更改 MaterialAlertDialog 中项目的文本颜色?

java.io.FileNotFoundException 打开失败 : EEXIST (File exists) Android 11

java - 为什么来自BluetoothSocket的输入/输出流被评估为NOT null,然后抛出空指针异常?

android - 错误 : supertypes of the following classes cannot be resolved. 请确保您在类路径中有所需的依赖项

android - 如何在 Android 中使用 Google Places API for Web 服务?