My app is targeting Android 7, with minimum SDK Android 4.
Hence, listening to CONNECTIVITY_CHANGE (Even when the app is killed) no longer work anymore. What I wish to do is
- Even when my main app is killed, when the internet connectivity change from "not available" to "available", I would like to start an alarm broadcast receiver.
 
I try to achieve with the following code
MainActivity.java
@Override
public void onPause() {
    super.onPause();
    installJobService();
}
private void installJobService() {
    // Create a new dispatcher using the Google Play driver.
    FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));
    Job myJob = dispatcher.newJobBuilder()
            // the JobService that will be called
            .setService(MyJobService.class)
            // uniquely identifies the job
            .setTag("my-unique-tag")
            // one-off job
            .setRecurring(true)
            // persist forever
            .setLifetime(Lifetime.FOREVER)
            // start between 0 and 60 seconds from now
            .setTrigger(Trigger.executionWindow(0, 60))
            // overwrite an existing job with the same tag
            .setReplaceCurrent(true)
            // retry with exponential backoff
            .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
            // constraints that need to be satisfied for the job to run
            .setConstraints(
                    // only run on any network
                    Constraint.ON_ANY_NETWORK
            )
            .build();
    dispatcher.mustSchedule(myJob);
}
However,
MyJobService.java
import android.content.Context;
import com.firebase.jobdispatcher.JobParameters;
import com.firebase.jobdispatcher.JobService;
import org.yccheok.jstock.gui.JStockApplication;
/**
 * Created by yccheok on 21/5/2017.
 */
public class MyJobService extends JobService {
    @Override
    public boolean onStartJob(JobParameters jobParameters) {
        Context context = this.getApplicationContext();
        android.util.Log.i("CHEOK", "Internet -> " + Utils.isInternetAvailable(context));
        // Answers the question: "Is there still work going on?"
        return false;
    }
    @Override
    public boolean onStopJob(JobParameters jobParameters) {
        // Answers the question: "Should this job be retried?"
        return true;
    }
}
However, the above code isn't reliable. How I test is
- Quit my app.
 - Kill my app explicitly via Settings using "Force stop".
 - Turn off internet.
 - Turn on internet.
 - Wait for few minutes. 
MyJobServiceis never executed. 
Is there any reliable way, to use FirebaseJobDispatcher to replace CONNECTIVITY_CHANGE reliably?
I had gone through Firebase JobDispatcher - how does it work compared to previous APIs (JobScheduler and GcmTaskService)? , but I still can't find a way to make it work reliably.