Я звоню location service
из JobSchedular
, чтобы заставить его работать, даже когда приложение работает в фоновом режиме.
Так я планирую свои LocationService
JobInfo jobInfo;
JobScheduler jobScheduler;
ComponentName componentName= new ComponentName(this, LocationUpdateService.class);
JobInfo.Builder builder= new JobInfo.Builder(11, componentName);
builder.setPeriodic(900000);
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
builder.setPersisted(true);
jobInfo= builder.build();
jobScheduler= (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(jobInfo);
Теперь он вызывает LocationUpdateService
и выполняет методы onCreate()
и onStartJob
, но не выполняет onLocationChanged()
вoreo
.Это прекрасно работает на устройствах Nougat
и lollipop
Вся логика отправки местоположения пользователя в службу или нет находится в onLocationChanged()
, и если я добавлю логику в onStartJob()
,Я не могу получить пользователя lat/lng
.
public class LocationUpdateService extends JobService implements
LocationListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
IServiceResponse {
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG, "onCreateCalled: ");
if (isGooglePlayServicesAvailable()) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
}
}
@Override
public boolean onStartJob(JobParameters params) {
Log.i(TAG, "onStartCommand: ");
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
Log.d("JobStopped", "JobStopped");
return true;
}
@Override
public void onLocationChanged(Location location) {
}
Я также пытался получить пользователя lat/lng
в onStartJob
, но он вернул меня (0,0) lat/lng
Location location= new Location("");
location.getLongitude()
Я использую play-services
версию 11.0.4