когда gps включен во фрагменте, не может получить lcoation из сервиса - PullRequest
0 голосов
/ 30 сентября 2018

Я использую FusedLocationProviderClient для получения местоположения в сервисе.У меня есть кнопка во фрагменте.Когда я открываю фрагмент местоположения, если gps выключен, и когда я включаю gps и нажимаю кнопку запуска, служба запускается, но местоположение не получается.Если я закрываю действие и включаю gps, после этого, если я открываю пункт управления местоположением и нажимаю кнопку «Пуск», я получаю местоположение.

Как получить местоположение, когда я включил gps после создания фрагмента?

Это мой сервис:

  @Override
public void onCreate() {
    super.onCreate();

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        return;
    }

    providerClient = LocationServices.getFusedLocationProviderClient(this);
    requestlocation();
    callbackLocation();


   if (Utils.isGpsEnabled(this)) {

       providerClient.requestLocationUpdates(locationRequest, locationCallback, Looper.myLooper());

   }

    else {

        stopSelf();
        Intent intent_stop = new Intent("stopself_intent");
        sendBroadcast(intent_stop);

    }



}

void requestlocation() {
    locationRequest = LocationRequest.create();
    locationRequest.setInterval(5000);
    locationRequest.setFastestInterval(5000);
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setSmallestDisplacement(10);
}

void callbackLocation() {

    locationCallback=new LocationCallback(){
        @Override
        public void onLocationResult(LocationResult locationResult) {
            super.onLocationResult(locationResult);
            Intent intent;
            Location location=locationResult.getLastLocation();

                if(location!=null){
                    intent=new Intent("StopServiceBroadcast");
                    intent.putExtra("location",location);

                    sendBroadcast(intent);

                }
            }

        };
    }

и событие кнопки запуска для запуска сервиса:

    getLocation_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if(checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION)==PackageManager.PERMISSION_GRANTED&&
            checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)==PackageManager.PERMISSION_GRANTED){
                 if(Utils.isGpsEnabled(getActivity())) {

        Intent intent = new Intent(getActivity(), LocService.class);
        getActivity().startService(intent);
        setButtonsState(true);


    }else {
        Snackbar.make(relativeLayout,"Gps is off. Please open Gps and try again",Snackbar.LENGTH_LONG).show();
    }

            }




        }
    });
...