问题描述
你好吗 我喜欢在每年的每个星期日的10:00:00 AM进行一次活动 它可以工作一次。
示例:一个倒数计时器在周六结束,在周日的10:00:00,i 在十点钟自动重启(间隔为一天)我想在礼物关闭后的第二天打开礼物)
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,8);
cal.set(Calendar.MINUTE,19);
cal.set(Calendar.SECOND,20);
if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
if (cal.get(Calendar.HOUR_OF_DAY) == 8) {
Toast.makeText(getApplicationContext(),"synday is 8 oclock",Toast.LENGTH_SHORT).show();
if (cal.get(Calendar.MINUTE) == 19) {
Toast.makeText(getApplicationContext(),"synday is min",Toast.LENGTH_SHORT).show();
resetTimer();
} else {
Toast.makeText(getApplicationContext(),"synday not min",Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getApplicationContext(),"synday no 8",Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getApplicationContext(),"no sunday",Toast.LENGTH_SHORT).show();
}
}
解决方法
如果您想安排每个星期六重置计时器,可以使用Android的WorkManager。 它支持每个API级别,因此您不会有任何问题。 这是文档:https://developer.android.com/topic/libraries/architecture/workmanager
它可以归结为:
导入这些依赖项
implementation "androidx.work:work-runtime:2.4.0"
定义您想做什么:
public class TimerResetWorker extends Worker {
public TimerResetWorker(@NonNull Context context,@NonNull WorkerParameters params) {
super(context,params);
}
@Override
public Result doWork() {
resetTimer(); //do what you want to do
return Result.success(); //you have Result.failure() / retry() in case something goes wrong
}
}
然后只需每7天(从星期六开始)安排工作:
PeriodicWorkRequest mWork = new PeriodicWorkRequest.Builder(TimerResetWorker.class,7,TimeUnit.DAYS).build();
WorkManager.getInstance().enqueue(mWork);