Диспетчер заданий Firebase не планирует

Я просмотрел несколько ответов на этот вопрос, но ничего не добился. Кто-нибудь знает, почему мой FirebaseDispatcher не выполняется? Я устанавливаю окно запуска от 1 до 5 секунд, чтобы посмотреть, работает ли оно. Мое приложение запускается, и этот метод вызывается из служебного класса:

private static void scheduleFirebaseJobSync(@NonNull final Context context){

    try {
        com.firebase.jobdispatcher.Driver driver = new GooglePlayDriver(context);
        FirebaseJobDispatcher firebaseJobDispatcher = new FirebaseJobDispatcher(driver);

        Job syncJob = firebaseJobDispatcher.newJobBuilder()
                .setService(FireBaseJobService.class)
                .setTag(WEATHER_SYNC_TAG)
                .setConstraints(Constraint.ON_ANY_NETWORK)
                .setLifetime(Lifetime.FOREVER)
                .setRecurring(true)
                .setTrigger(Trigger.executionWindow(1,5))
                .setReplaceCurrent(true)
                .build();
        firebaseJobDispatcher.schedule(syncJob);
    }

Вот вызываемый класс FirebaseJobService:

public class FireBaseJobService extends JobService {
private AsyncTask<Void,Void,Void> fetchMovieDate;

@Override
public boolean onStartJob(final JobParameters job) {
    fetchMovieDate = new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {

            Context context = getApplicationContext();
            WeatherSyncTask.syncWeatherDB(context);
            jobFinished(job,false);
            Log.d("FIREBASEJOB", "IN FIRE BASE JOB FINISHED");
            return null;
        }
        @Override
        protected void onPostExecute(Void aVoid) {
            jobFinished(job,false);
        }
    };
    fetchMovieDate.execute();
    return true;
}

@Override
public boolean onStopJob(JobParameters job) {
    if (fetchMovieDate!=null){
        fetchMovieDate.cancel(true);
    }

    return true;
}}
1
0
722
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Зарегистрируйте разрешения в AndroidManifest.xml:

<uses-permission android:name = "android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />

Добавьте объявление службы в AndroidManifest.xml:

<service
    android:exported = "false"
    android:name = ".FireBaseJobService ">
    <intent-filter>
        <action android:name = "com.firebase.jobdispatcher.ACTION_EXECUTE"/>
    </intent-filter>
</service>

Отправьте задание одним из двух вариантов:

firebaseJobDispatcher.schedule(syncJob);
firebaseJobDispatcher.mustSchedule(syncJob);

И в JobService есть:

public class FireBaseJobService extends JobService {

    @Override
    public boolean onStartJob(final JobParameters job) {
        WeatherSyncTask.syncWeatherDB(getApplicationContext());
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters job) {
        return true;
    }}
}

В дополнение ко всем другим ответам ниже не забудьте использовать более свежую библиотеку firebase-jobdispatcher.

В моем случае аналогичная проблема с той же структурой кода в запросе и после реализации предложений jantursky ниже, она была решена путем изменения версии firebase lib, импортированной в build.gradle, на последнюю.

Я имел : реализация 'com.firebase: firebase-jobdispatcher: 0.5.0'

а затем я поставил: реализация 'com.firebase: firebase-jobdispatcher: 0.8.5'

вероятно, более свежий будет хорош таким же.

Другие вопросы по теме