Android-作业 运行 每次插入设备时
Android-Job run every time device is plugged in
在我的 Android 应用程序中,每次设备插入和空闲时我都需要 运行 后台服务(它应该在用户将他的设备连接到充电器后启动并在他结束时结束断开连接)。
我想要的是与收听 ACTION_POWER_CONNECTED 广播类似的东西,但针对 Oreo 的广播不会被发送。
我尝试了 Android-Evernote 的作业,因为它不需要 Google Play 服务,而 Firebase JobDispatcher 需要。
new JobRequest.Builder(DemoSyncJob.TAG)
.setRequiresCharging(true)
.setRequiresDeviceIdle(true)
.build()
.schedule();
问题是我不想每次都安排作业。相反,我想安排一次作业,并在每次用户将他的设备连接到充电器时 运行。
怎么办?
谢谢。
因为我每天只运行作业一次就好了,但只有在设备插上电源时,我已经解决了这个问题:
public class ProcessPhotosJob extends Job {
public static final String TAG = "process_photos_job";
@NonNull
@Override
protected Result onRunJob(Params params) {
new ProcessPhotos().execute(getContext());
scheduleForTomorrow();
return Result.SUCCESS;
}
public static void scheduleNow() {
schedule(1);
}
public static void scheduleForTomorrow() {
schedule(TimeUnit.DAYS.toMillis(1));
}
private static void schedule(long delayMillis) {
if (!JobManager.instance().getAllJobRequestsForTag(TAG).isEmpty()) {
// Job already scheduled
return;
}
new JobRequest.Builder(ProcessPhotosJob.TAG)
.setExecutionWindow(delayMillis, delayMillis + TimeUnit.DAYS.toMillis(1))
.setRequiresCharging(true)
.setRequiresDeviceIdle(true)
.setRequirementsEnforced(true)
.setUpdateCurrent(true)
.build()
.schedule();
}
}
希望对大家有所帮助。
在我的 Android 应用程序中,每次设备插入和空闲时我都需要 运行 后台服务(它应该在用户将他的设备连接到充电器后启动并在他结束时结束断开连接)。
我想要的是与收听 ACTION_POWER_CONNECTED 广播类似的东西,但针对 Oreo 的广播不会被发送。
我尝试了 Android-Evernote 的作业,因为它不需要 Google Play 服务,而 Firebase JobDispatcher 需要。
new JobRequest.Builder(DemoSyncJob.TAG)
.setRequiresCharging(true)
.setRequiresDeviceIdle(true)
.build()
.schedule();
问题是我不想每次都安排作业。相反,我想安排一次作业,并在每次用户将他的设备连接到充电器时 运行。
怎么办? 谢谢。
因为我每天只运行作业一次就好了,但只有在设备插上电源时,我已经解决了这个问题:
public class ProcessPhotosJob extends Job {
public static final String TAG = "process_photos_job";
@NonNull
@Override
protected Result onRunJob(Params params) {
new ProcessPhotos().execute(getContext());
scheduleForTomorrow();
return Result.SUCCESS;
}
public static void scheduleNow() {
schedule(1);
}
public static void scheduleForTomorrow() {
schedule(TimeUnit.DAYS.toMillis(1));
}
private static void schedule(long delayMillis) {
if (!JobManager.instance().getAllJobRequestsForTag(TAG).isEmpty()) {
// Job already scheduled
return;
}
new JobRequest.Builder(ProcessPhotosJob.TAG)
.setExecutionWindow(delayMillis, delayMillis + TimeUnit.DAYS.toMillis(1))
.setRequiresCharging(true)
.setRequiresDeviceIdle(true)
.setRequirementsEnforced(true)
.setUpdateCurrent(true)
.build()
.schedule();
}
}
希望对大家有所帮助。