2017-10-07 46 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(); 
    } 
} 

希望它可以帮助别人。