我的应用面向 Android 7,最低 SDK 为 Android 4。
因此,收听CONNECTIVITY_CHANGE
(即使应用程序被杀死)不再起作用。我想做的是
- 即使我的主应用程序被杀死,当互联网连接从“不可用”变为“可用”时,我也想启动一个警报广播接收器。
我尝试使用以下代码来实现
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);
}
然而,
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;
}
}
但是,上面的代码并不可靠。我如何测试是
- 退出我的应用程序。
- 使用“强制停止”通过设置明确终止我的应用程序。
- 关闭互联网。
- 打开互联网。
- 等待几分钟。
MyJobService
永远不会被执行。
有什么可靠的方法可以使用 FirebaseJobDispatcher 可靠地替换 CONNECTIVITY_CHANGE 吗?
我已经使用了Firebase JobDispatcher - 与以前的 API(JobScheduler 和 GcmTaskService)相比,它是如何工作的?,但我仍然找不到让它可靠工作的方法。