Внедрение диспетчера заданий - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь реализовать диспетчер заданий для своего проекта, следуя этому руководству 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;
    }

1 Ответ

0 голосов
/ 18 мая 2020

Вы добавили ChallengeService в файл манифеста и защитили его разрешением android .permission.BIND_JOB_SERVICE?

<service android:name="ChallengeService"
              android:permission="android.permission.BIND_JOB_SERVICE" >
         ...
</service>

Также JobService устарел, вы можете использовать Android Jetpack WorkManager.

Вот руководство по началу работы https://developer.android.com/topic/libraries/architecture/workmanager/basics

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...