通过WorkManager API在每个星期五安排特定任务

3

我正在使用WorkManager来发送短信,以便在每个星期五进行提醒,即使应用程序处于关闭状态也可以发送。 示例:

PeriodicWorkRequest periodicWork = new 
    PeriodicWorkRequest.Builder(MyWorker.class, 7, TimeUnit.DAYS).build();
WorkManager.getInstance().enqueue(periodicWork);

我希望有人能在这方面提供帮助。谢谢。

注意:这是一个一次性的请求。它目前可以正常工作,即使应用程序已关闭。

WorkManager workManager = WorkManager.getInstance();
workManager.enqueue(new OneTimeWorkRequest.Builder(MyWorker.class).build());

如果假设WorkManager不可行,请在Android中建议任何其他API。
已经参考了这个链接,但它没有起作用。 使用WorkManager在特定时间安排工作

请问您能否定义一下这里实际上的问题是什么? - pavle
4个回答

1

这不是最好的解决方案,但它可以工作。 使用PeriodicWorkRequest并每天安排任务。然后使用jodatime库检查是否为星期五。如果是星期五,则执行任务。如果不是,则取消任务。根据第一次执行,您可以通过将6添加到请求来操作PeriodicWorkRequest以每周五安排。


谢谢回复。我已经尝试过这个周期性的方法,但是它只运行了一次。例如,在手机设置中关闭网络日期时间,然后在日历中手动更改日期时,通知不会触发。您能否告诉我使用的workmanager依赖版本是哪个?我现在尝试了'androidx.work:work-runtime:2.2.0'。 - harikrishnan

0

对于这种用例,WorkManager 是一个错误的选择。

为什么?

WorkManager 旨在处理可延迟的任务——即不需要立即运行并且即使应用退出或设备重新启动也需要可靠地运行。

如果您希望在某个特定时间点准确运行任务,则应使用 AlarmManager。


0
以下步骤可能有帮助:
  1. 使用Alarm Manager Api触发待处理意图。
  2. 在接收广播后执行步骤1。
  3. 使用另一个广播接收器在设备重新启动(BOOT_COMPLETED)后执行步骤1。

0
可以使用AlarmManager(尚未尝试过WorkManager,但是已使用AlarmManager进行以下方式测试和工作正常)。
每周五执行一次,您需要注册广播接收器以接收意图,以便在接收时进行短信发送。
    PendingIntent pintent = PendingIntent.getBroadcast( this, 0, new Intent("RECIVER"), 0 );

    AlarmManager alarm = (AlarmManager) Context.getSystemService(Context.ALARM_SERVICE);
    Calendar timeOff = Calendar.getInstance();
    int days = Calendar.FRIDAY + (7 - timeOff.get(Calendar.DAY_OF_WEEK)); 
    timeOff.add(Calendar.DATE, days);
    timeOff.set(Calendar.HOUR, 12);
    timeOff.set(Calendar.MINUTE, 0);
    timeOff.set(Calendar.SECOND, 0);

    alarm.set(AlarmManager.RTC_WAKEUP, timeOff.getTimeInMillis(), pintent);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接