2017-10-07 1 views
0

Android 앱에서는 기기가 연결되어 있고 유휴 상태가 될 때마다 백그라운드 서비스를 실행해야합니다 (사용자가 기기를 충전기에 연결 한 후 시작해야합니다. 연결 해제).기기가 연결될 때마다 Android-Job이 실행됩니다.

내가 원하는 것은 ACTION_POWER_CONNECTED 방송을 청취하는 것과 비슷한 일이지만, Oreo를 타겟팅하는 것은이 방송을 보내지 않습니다.

Firebase JobDispatcher와 마찬가지로 Google Play 서비스가 필요하지 않으므로 Evernote에서 Android-Job을 사용해 보았습니다.

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

문제는 매번 작업을 예약하지 않아도된다는 것입니다. 대신 사용자가 기기를 충전기에 연결할 때마다 작업을 한 번 예약하고 실행해야합니다.

어떻게 할 수 있습니까? 감사합니다. 나 장치가 연결되어있는 경우에만 하루에 한 번만를 작업을 실행 만하는 것이 좋은이기 때문에

답변

0

, 나는이 같은 문제를 해결 한 :

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

은 사람을 도움이되기를 바랍니다.

관련 문제