Я пытаюсь реализовать диспетчер заданий для своего проекта, следуя этому руководству https://github.com/googlearchive/firebase-jobdispatcher-android, но не могу понять, как запланировать задание, или он не работает.
Я хочу показывать вызовы каждую неделю в субботу; получить вызов из базы данных firebase.
Я пробовал приведенный ниже код, но он не работает.
Может ли кто-нибудь помочь мне? любая статья / документ, который помогает понять концепцию?
Challenge.Service
public class ChallengeService extends JobService {
public static final String TAG = "ChallengeService";
@Override
public boolean onStartJob(final JobParameters job) {
Log.d(TAG, "completeJob: " + "jobStarted");
new Thread(new Runnable() {
@Override
public void run() {
codeYouWantToRun(job);
}
}).start();
return true;
}
@Override
public boolean onStopJob(JobParameters job) {
return false;
}
public void codeYouWantToRun(final JobParameters parameters) {
try {
Log.d(TAG, "completeJob: " + "jobStarted");
//This task takes 2 seconds to complete.
Thread.sleep(2000);
Calendar mCalendar = Calendar.getInstance();
final String mWeekofyear = String.valueOf(getWeekOfYear(mCalendar));
Log.d("ChallengeService", "mWeekofyear:: " + mWeekofyear);
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference().child("Challenges").child(mWeekofyear);
myRef.keepSynced(true);
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String mChallengeOfWeek = dataSnapshot.getValue(Challenge.class).getName();
Log.d(TAG, "mChallengeOfWeek: " + mChallengeOfWeek);
}
@Override
public void onCancelled(DatabaseError error) {
Log.w(TAG, "Failed to read value.", error.toException());
}
});
Log.d(TAG, "completeJob: " + "jobFinished");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
jobFinished(parameters, true);
}
}
private int getWeekOfYear(Calendar mCalendar) {
return mCalendar.get(Calendar.WEEK_OF_YEAR);
}
}
MainFragment
if (mDayName.equals("Saturday")) {
scheduleJob(this);
}
private static void scheduleJob(Context context) {
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));
Job job = createJob(dispatcher);
dispatcher.mustSchedule(job);
Log.d(TAG,"job::"+job);
}
private static Job createJob(FirebaseJobDispatcher dispatcher) {
Job job = dispatcher.newJobBuilder()
.setLifetime(Lifetime.FOREVER)
.setService(ChallengeService.class)
.setTag("UniqueTagForYourJob")
.setReplaceCurrent(false)
.setRecurring(true)
.setTrigger(Trigger.executionWindow(30, 60))
.setRetryStrategy(RetryStrategy.DEFAULT_LINEAR)
.setConstraints(Constraint.ON_ANY_NETWORK, Constraint.DEVICE_CHARGING)
.build();
return job;
}