0

在我的 Android 应用程序中,每次设备插入和空闲时,我都需要运行后台服务(它应该在用户将设备连接到充电器后开始,并在他断开连接时结束)。

我想要的是与收听 ACTION_POWER_CONNECTED 广播类似的东西,但是针对奥利奥,这个广播不会被发送。

我从 Evernote 尝试了 Android-Job,因为它不需要 Google Play 服务,就像 Firebase JobDispatcher 那样。

 new JobRequest.Builder(DemoSyncJob.TAG)
            .setRequiresCharging(true)
            .setRequiresDeviceIdle(true)
            .build()
            .schedule();

问题是我不想每次都安排工作。相反,我想安排一次作业,并在每次用户将他的设备连接到充电器时运行它。

怎么做到呢?谢谢你。

4

1 回答 1

1

因为我每天只运行一次工作就可以了,但只有在插入设备时,我已经解决了这样的问题:

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();
    }
}

希望它可以帮助某人。

于 2017-10-11T09:08:12.127 回答