| /* |
| * Copyright 2013 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.demo.jobSchedulerApp.service; |
| |
| import android.app.job.JobInfo; |
| import android.app.job.JobScheduler; |
| import android.app.job.JobParameters; |
| import android.app.job.JobService; |
| import android.content.ComponentName; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.os.AsyncTask; |
| import android.os.Message; |
| import android.os.Messenger; |
| import android.os.RemoteException; |
| import android.util.Log; |
| import android.util.SparseArray; |
| import android.widget.Toast; |
| |
| import com.android.demo.jobSchedulerApp.MainActivity; |
| |
| import java.util.HashMap; |
| import java.util.LinkedList; |
| import java.util.Random; |
| |
| |
| /** |
| * Service to handle sync requests. |
| * <p> |
| * This service is invoked in response to Intents with action android.content.SyncAdapter, and |
| * returns a Binder connection to SyncAdapter. |
| * <p> |
| * For performance, only one sync adapter will be initialized within this application's context. |
| * <p> |
| * Note: The SyncService itself is not notified when a new sync occurs. It's role is to manage the |
| * lifecycle of our and provide a handle to said SyncAdapter to the OS on |
| * request. |
| */ |
| public class TestJobService extends JobService { |
| private static final String TAG = "SyncService"; |
| |
| @Override |
| public void onCreate() { |
| super.onCreate(); |
| Log.i(TAG, "Service created"); |
| } |
| |
| @Override |
| public void onDestroy() { |
| super.onDestroy(); |
| Log.i(TAG, "Service destroyed"); |
| } |
| |
| @Override |
| public int onStartCommand(Intent intent, int flags, int startId) { |
| Messenger callback = intent.getParcelableExtra("messenger"); |
| Message m = Message.obtain(); |
| m.what = MainActivity.MSG_SERVICE_OBJ; |
| m.obj = this; |
| try { |
| callback.send(m); |
| } catch (RemoteException e) { |
| Log.e(TAG, "Error passing service object back to activity."); |
| } |
| return START_NOT_STICKY; |
| } |
| |
| @Override |
| public boolean onStartJob(JobParameters params) { |
| Log.i(TAG, "on start job: " + params.getJobId()); |
| currentId++; |
| jobParamsMap.put(currentId, params); |
| final int currId = this.currentId; |
| if (mActivity != null) { |
| mActivity.onReceivedStartJob(params); |
| } |
| |
| Toast.makeText( |
| this, "On start job: '" + params.getJobId() + "' deadline exceeded: " + |
| params.isOverrideDeadlineExpired(), |
| Toast.LENGTH_LONG).show(); |
| |
| return true; |
| } |
| |
| |
| @Override |
| public boolean onStopJob(JobParameters params) { |
| Log.i(TAG, "on stop job: " + params.getJobId()); |
| int ind = jobParamsMap.indexOfValue(params); |
| jobParamsMap.remove(ind); |
| mActivity.onReceivedStopJob(); |
| return false; // no reschedule |
| } |
| |
| static int currentId = 0; |
| MainActivity mActivity; |
| private final SparseArray<JobParameters> jobParamsMap = new SparseArray<JobParameters>(); |
| |
| |
| public void setUiCallback(MainActivity activity) { |
| mActivity = activity; |
| } |
| |
| /** Send job to the JobScheduler. */ |
| public void scheduleJob(JobInfo job) { |
| Log.d(TAG, "Scheduling job " + job); |
| JobScheduler tm = |
| (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE); |
| tm.schedule(job); |
| } |
| |
| public boolean callJobFinished() { |
| if (jobParamsMap.size() == 0) { |
| return false; |
| } |
| JobParameters params = jobParamsMap.valueAt(0); |
| if (params == null) { |
| return false; |
| } else { |
| jobFinished(params, false); |
| jobParamsMap.removeAt(0); |
| return true; |
| } |
| } |
| |
| } |