我正在尝试安排每天晚上 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();
}
}
主活动
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;
}
}
}
此外,我还安排了一个定期工作,此作业不适用于红色mi等某些设备,在一台三星设备上它没有重复,但在moto g4上运行良好。
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));
希望这有帮助。