Я просмотрел несколько ответов на этот вопрос, но ничего не добился. Кто-нибудь знает, почему мой 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;
}}
Зарегистрируйте разрешения в 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'
вероятно, более свежий будет хорош таким же.