@Override public boolean onStartJob(JobParameters params) { Log.i("PhotosContentJob", "JOB STARTED!"); mRunningParams = params; // Did we trigger due to a content change? if (params.getTriggeredContentAuthorities() != null) { if (params.getTriggeredContentUris() != null) { // If we have details about which URIs changed, then iterate through them // and collect valid uris and send them to UploadService ArrayList<Uri> uris = new ArrayList<>(); for (Uri uri : params.getTriggeredContentUris()) { List<String> path = uri.getPathSegments(); if (path != null && path.size() == EXTERNAL_PATH_SEGMENTS.size() + 1) { // This is a specific file. uris.add(uri); } } Intent intent = Intents.Builder.with(this).buildUploadServiceIntent(uris); startService(intent); } else { // We don't have any details about URIs (because too many changed at once) Log.i(TAG, "Photos rescan needed!"); } } else { Log.i(TAG, "(No photos content)"); } scheduleJob(PhotosContentJob.this); return false; }
private JobParameters toLocalParameters(android.app.job.JobParameters params, Bundle transientExtras) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { return new JobParameters( params.getJobId(), new PersistableBundle(params.getExtras()), params.getTransientExtras(), params.isOverrideDeadlineExpired(), params.getTriggeredContentUris(), params.getTriggeredContentAuthorities()); } else { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return new JobParameters( params.getJobId(), new PersistableBundle(params.getExtras()), transientExtras, params.isOverrideDeadlineExpired(), params.getTriggeredContentUris(), params.getTriggeredContentAuthorities()); } else { return new JobParameters( params.getJobId(), new PersistableBundle(params.getExtras()), transientExtras, params.isOverrideDeadlineExpired(), null, null); } } }