如何使用 FirebaseJobDispatcher 可靠地替换CONNECTIVITY_CHANGE



我的应用以 Android 7 为目标平台,最低为 SDK Android 4。

因此,收听CONNECTIVITY_CHANGE(即使应用程序被杀死)不再有效。我想做的是

  1. 即使我的主要应用程序被杀死,当互联网连接从"不可用"变为"可用"时,我也想启动警报广播接收器。

我尝试使用以下代码实现

主要活动.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);
}

然而

我的就业服务.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;
}
}

但是,上面的代码并不可靠。我如何测试是

  1. 退出我的应用。
  2. 使用"强制停止"通过"设置"明确终止我的应用程序。
  3. 关闭互联网。
  4. 打开互联网。
  5. 等待几分钟。MyJobService永远不会执行。

有没有可靠的方法,使用FirebaseJobDispatcher可靠地替换CONNECTIVITY_CHANGE?

我曾经使用过Firebase JobDispatcher - 与以前的API(JobScheduler和GcmTaskService)相比,它是如何工作的?但我仍然找不到一种方法来使其可靠地工作。

不确定您如何通过FirebaseJobDispatcher检测CONNECTIVITY_CHANGE,但对于同样的情况,我使用了广播

public class ConnectivityStateReceiver extends BroadcastReceiver {
String TAG = "MyApp";
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, NetworkService.class);
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm == null) {
return;
} else if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected()) {
Log.e(TAG, "Connected!");
context.startService(serviceIntent);
} else {
Log.e(TAG, "Not Connected!");
context.stopService(serviceIntent);
}
}

}

相关内容

  • 没有找到相关文章

最新更新