在Android模拟器上运行时,我无法让JobScheduler启动预定作业。如果我测试真正的 三星Galaxy S7和Nexus 5X ,两者都运行 Android 6.0.1 ,工作立即开始。仿真器配置为100%电池充电和启用全网速。
我在OSX El capitan 10.11.4上运行 Android Studio 2.1.1,jre 1.8.0_92-b14 。模拟器版本 25.1.6 ,并且正在运行 Android 6.0 。
这是我安排工作的方式:
public static void sendInspectionSessions(Context context) {
JobScheduler js = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo job = new JobInfo.Builder(
INSPECTION_SESSION_JOB_ID,
new ComponentName(context, InspectionSessionJobService.class))
.setBackoffCriteria(TimeUnit.SECONDS.toMillis(30), JobInfo.BACKOFF_POLICY_EXPONENTIAL)
.setPersisted(true)
.setMinimumLatency(0)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setOverrideDeadline(Config.INSPECTION_SESSION_SEND_DEADLINE)
.build();
int id = js.schedule(job);
if (id > 0) {
LogUtil.i(TAG, "Scheduled InspectionSession send job with id " + id + ". Supplied id was " + INSPECTION_SESSION_JOB_ID);
} else {
LogUtil.e(TAG, "Failed to schedule InspectionSession send job. Return code was " + id);
}
}
schedule()在模拟器和设备上都返回1。模拟器上未显示任何错误消息。
我已通过以下方式在 AndroidManifest 中定义了我的工作服务:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<service android:name=".service.InspectionSessionJobService"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true" />
我是否错过了某些内容,或者这是Android模拟器的错误?有没有人让JobScheduler在模拟器上工作?
答案 0 :(得分:0)
可能为时已晚,但你在哪里调用sendInspectionSessions()?您必须将应用程序上下文传递给它。
对于其他人:您可以在应用程序的onCreate()方法中启动它