[英]How to set the exact time to android job for a daily job at fixed time?
我正在嘗試安排將在每天晚上10點運行的作業。
我嘗試使用setExact方法並通過將22小時轉換為毫秒來提供毫秒,為了進行測試,我執行了該應用程序並將系統時間更改為10 PM,但該作業未執行。
我還嘗試給出即將到來的時間,因此將12:45轉換為毫秒並設置為setExact方法。 但這也不起作用。
如何設置並測試?
FileTrackJob
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();
MainApp
public class MainApp extends Application {
@Override
public void onCreate() {
super.onCreate();
JobManager.create(this).addJobCreator(new DemoJobCreator());
}
}
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;
}
}
}
另外我已經安排了一份定期工作,該工作在某些設備上不起作用,例如red 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
使用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));
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.