2017-10-07 95 views
0

在我的Android應用程序中,每當設備插入並閒置時都需要運行後臺服務(應在用戶將設備連接到充電器後啓動,斷開它)。Android設備每次插入設備時運行

我想要的是類似的事情監聽ACTION_POWER_CONNECTED廣播,但針對奧利奧這個廣播不會被髮送。

我嘗試了Evernote的Android-Job,因爲它不需要Google Play服務,就像Firebase JobDispatcher一樣。

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

希望它可以幫助別人。