Oreo не вызывает метод onLocationChanged из расписания заданий - PullRequest
0 голосов
/ 31 мая 2018

Я звоню 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

...