2017-04-19 159 views
3

我想實現一個jobcheduler來調用jobservice,這會在每5分鐘觸發一次,以捕獲在特定的geoLocation中花費的時間。但下面的代碼是爲棉花糖和以上的工作,但它爲棒棒糖和以下的崩潰。 這是我的代碼 - >java.lang.NoSuchMethodError:沒有虛擬方法getSystemService

ComponentName serviceComponent = new ComponentName(context, SyncDbToServerJobService.class); 
     JobInfo.Builder builder = new JobInfo.Builder(0, serviceComponent); 
     PersistableBundle bundle = new PersistableBundle(); 
     bundle.putString(Constants.ENTERED_TIME, enteredTime); 
     builder.setPeriodic(intervalMillis).setExtras(bundle).setPersisted(true); 
     builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED); // require unmetered network 
     builder.setRequiresDeviceIdle(true); // device should be idle 
     builder.setRequiresCharging(false); // we don't care if the device is charging or not 
     JobScheduler jobScheduler = context.getSystemService(JobScheduler.class); 
     jobScheduler.schedule(builder.build()); 

這個喜歡做的錯誤 - >

JobScheduler jobScheduler = context.getSystemService(JobScheduler.class); 

這是我的日誌錯誤 - >

04-19 11:38:25.358 1986-4658/com.eonelectric.eon E/AndroidRuntime: FATAL EXCEPTION: IntentService[GeofenceTransitionsIS] 
                   Process: com.eonelectric.eon, PID: 1986 
                   java.lang.NoSuchMethodError: No virtual method getSystemService(Ljava/lang/Class;)Ljava/lang/Object; in class Landroid/content/Context; or its super classes (declaration of 'android.content.Context' appears in /system/framework/framework.jar) 
                    at com.eonelectric.eon.GeneralUtil.startSyncAlarm(GeneralUtil.java:440) 
                    at com.eonelectric.eon.beatTrack.GeofenceTransitionsIntentService.getGeofenceTransitionDetails(GeofenceTransitionsIntentService.java:137) 
                    at com.eonelectric.eon.beatTrack.GeofenceTransitionsIntentService.onHandleIntent(GeofenceTransitionsIntentService.java:96) 
                    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 
                    at android.os.Handler.dispatchMessage(Handler.java:102) 
                    at android.os.Looper.loop(Looper.java:135) 
                    at android.os.HandlerThread.run(HandlerThread.java:61) 
+0

我也面臨同樣的問題,你有任何解決方案? – Jordon

+0

我使用AlarmManager作爲下面的棒棒糖(API 21)和JobScheduler作爲棉花糖及以上作品。現在它不崩潰。但JobScheduler仍然沒有在確切的時間(5分鐘)觸發服務,可能是操作系統殺死後臺線程。並且AlarmManager太耗電了。 @Jordon –

+0

對我來說,JobScheduler正在棉花糖上工作,我嘗試了10秒的時間間隔,並且工作良好。你是否檢查了Android N上的作業調度程序?對我而言,Job只在Android N中被調用一次。 – Jordon

回答

1

試試這個它會爲棒棒糖工作

ComponentName jobService = new ComponentName(getApplicationContext().getPackageName(), SyncService.class.getName()); JobInfo.Builder builder = new JobInfo.Builder(0, jobService); builder.setPeriodic(10000); builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); jobScheduler = (JobScheduler) this.getSystemService(JOB_SCHEDULER_SERVICE); jobScheduler.schedule(builder.build());

+0

可能會起作用。但推出了JobScheduler來處理打瞌睡模式問題,打盹模式進入棉花糖/牛軋糖。所以我正在處理的代碼使用 - 如果(android.os.Build.VERSION.SDK_INT <= 21)GeneralUtil.startSyncAlarmLollipop(context,enteredTime); } else { GeneralUtil.startSyncAlarm(context,enteredTime); } –

+0

GeneralUtil.startSyncAlarmLollipop(context,enteredTime) - 在此方法中,我使用帶有PendingIntent的AlarmManager來調用BroadcastReceiver。 GeneralUtil.startSyncAlarm(context,enteredTime) - 在此方法中,我使用JobScheduler。 –

相關問題