gpt4 book ai didi

java - 如何在固定时间设置android作业的准确时间?

转载 作者:行者123 更新时间:2023-12-02 11:23:15 25 4
gpt4 key购买 nike

我正在尝试安排每天晚上 10 点运行的作业。

我尝试使用 setExact 方法并通过将 22 小时转换为毫秒来提供毫秒,为了测试我执行了应用程序并将系统时间更改为晚上 10 点,但作业没有执行。

我还尝试给出即将到来的时间,因此将 12:45 转换为毫秒并提供给 setExact 方法。但这也不起作用。

如何设置并测试?

文件跟踪作业

class FileTrackJob extends Job {

static final String TAG = "FileTracking";

@NonNull
@Override
protected Result onRunJob(Params params) {

PendingIntent pendingIntent = PendingIntent.getActivity(getContext(), 0,
new Intent(getContext(), MainActivity.class), 0);

Calendar cal = Calendar.getInstance();
Date currentLocalTime = cal.getTime();
DateFormat date = new SimpleDateFormat("HH:mm a");
// you can get seconds by adding "...:ss" to it
String localTime = date.format(currentLocalTime);

Notification notification = new NotificationCompat.Builder(getContext())
.setContentTitle("Android Job Demo")
.setContentText("Notification from Android Job Demo App. " + localTime)
.setAutoCancel(true)
.setContentIntent(pendingIntent)
.setSmallIcon(R.mipmap.ic_launcher)
.setShowWhen(true)
.setColor(Color.RED)
.setLocalOnly(true)
.build();

NotificationManagerCompat.from(getContext())
.notify(new Random().nextInt(), notification);


return Result.SUCCESS;
}

static void scheduleNoti() {
new JobRequest.Builder(TrackingJob.TAG)
// .setPeriodic(TimeUnit.MINUTES.toMillis(15), TimeUnit.MINUTES.toMillis(15))
.setExact(44820000)
.setUpdateCurrent(true)
.setPersisted(true)
.build()
.schedule();
}
}

主要 Activity

FileTrackJob.scheduleNoti();

主应用

public class MainApp extends Application {

@Override
public void onCreate() {
super.onCreate();

JobManager.create(this).addJobCreator(new DemoJobCreator());
}
}

演示作业创建器

class DemoJobCreator implements JobCreator {

@Override
public Job create(String tag) {
switch (tag) {
case TrackingJob.TAG:
return new TrackingJob();

case FileTrackJob.TAG:
return new FileTrackJob();
default:
return null;
}
}
}

我还安排了一项定期工作,这项工作在某些设备(例如红米)上不起作用,在一台三星设备上它不会重复,但在 moto g4 plus 上运行良好。

class TrackingJob extends Job {

static final String TAG = "tracking";

@NonNull
@Override
protected Result onRunJob(Params params) {

Intent pi = new Intent(getContext(), GetLocationService.class);
getContext().startService(pi);


return Result.SUCCESS;
}

static void schedulePeriodic() {
new JobRequest.Builder(TrackingJob.TAG)
.setPeriodic(TimeUnit.MINUTES.toMillis(15), TimeUnit.MINUTES.toMillis(15))
.setUpdateCurrent(true)
.setPersisted(true)
.build()
.schedule();
}
}

有人可以帮忙吗?谢谢..

最佳答案

您必须使用 DailyJob 而不是 Job 在每天的特定时间执行某些操作。

public static final class MyDailyJob extends DailyJob {

public static final String TAG = "MyDailyJob";

public static void schedule() {
// schedule between 1 and 6 *PM*
DailyJob.schedule(new JobRequest.Builder(TAG), TimeUnit.HOURS.toMillis(13), TimeUnit.HOURS.toMillis(18));
}

@NonNull
@Override
protected DailyJobResult onRunDailyJob(Params params) {
return DailyJobResult.SUCCESS;
}
}

另外:如果您想设置特定的分钟和秒,请使用(假设在 15:48:05 到 17:42:09 之间):

    DailyJob.schedule(new JobRequest.Builder(TAG), TimeUnit.HOURS.toMillis(15)+TimeUnit.MINUTES.toMillis(48)+TimeUnit.SECONDS.toMillis(5), 
TimeUnit.HOURS.toMillis(17)+TimeUnit.MINUTES.toMillis(42)+TimeUnit.SECONDS.toMillis(9));

希望这有帮助。

关于java - 如何在固定时间设置android作业的准确时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49770911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com