Skip to content Skip to sidebar Skip to footer

Fusedlocationclient Not Calling Onlocationresult

I'm creating a location client at the moment, currently i have public void startUpdatingLocationProcess(Context context) { parentContext = context; if (mFusedLocationC

Solution 1:

Before requesting location updates, your app must connect to location services and make a location request. Some thing like this:

privatestatic LocationRequest createLocationRequest() {
    LogHelper.trace("createLocationRequest");
    LocationRequestmLocationRequest=newLocationRequest();
    mLocationRequest.setInterval(200000);
    mLocationRequest.setFastestInterval(300000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    return mLocationRequest;
}

publicstaticvoidcheckLocationService(final Fragment fragment, final FusedLocationProviderClient client, final OnSuccessListener<LocationSettingsResponse> successListener, OnFailureListener failureListener) {

    LogHelper.trace("checkLocationService");
    finalLocationRequestrequest= createLocationRequest();
    LocationSettingsRequest.Builderbuilder=newLocationSettingsRequest.Builder()
            .addLocationRequest(request);

    SettingsClientsettingsClient= LocationServices.getSettingsClient(fragment.getActivity());
    Task<LocationSettingsResponse> task = settingsClient.checkLocationSettings(builder.build());

    task.addOnSuccessListener(fragment.getActivity(), newOnSuccessListener<LocationSettingsResponse>() {
        @OverridepublicvoidonSuccess(LocationSettingsResponse locationSettingsResponse) {
            LogHelper.trace("onSuccess");
            startLocationService(client, request, newLocationCallback());
            successListener.onSuccess(locationSettingsResponse);
        }
    });

    task.addOnFailureListener(fragment.getActivity(), failureListener);
}

Solution 2:

try to active/desactive location from android settings.

Solution 3:

location == null.

See also LocationAvailability No Location Available. If you call

fusedLocationClient.getLocationAvailability()
    .addOnSuccessListener(this, locationAvailability -> {
    })

you will see that LocationAvailability[isLocationAvailable: false].

Probably it will happen because of an old emulator or

locationRequest = LocationRequest.create();
locationRequest
        .setNumUpdates(1)
        .setFastestInterval(0)
        .setSmallestDisplacement(0)

If you set setNumUpdates(1), it will return coordinate only one time and probably there will be null. I removed these lines and use

@SuppressLint("MissingPermission")privatefunstartLocationUpdates() {
    fusedLocationProviderClient?.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())
}

to start search location, then

locationCallback = object : LocationCallback() {
    overridefunonLocationResult(locationResult: LocationResult?) {
        super.onLocationResult(locationResult)

        if (locationResult?.lastLocation == null) {
            Timber.d("Location missing in callback.")
        } else {
            Timber.d(
                "Location Callback ${locationResult.lastLocation}")
            latitude = locationResult.lastLocation.latitude
            longitude = locationResult.lastLocation.longitude
            stopLocationUpdates()
        }
    }
}

fusedLocationProviderClient?.lastLocation
    ?.addOnSuccessListener { location ->
        Timber.d("lastLocation success $location")
        if (location == null) {
            startLocationUpdates()
        } else {
            latitude = location.latitude
            longitude = location.longitude
        }
    }
    ?.addOnFailureListener { failure ->
        Timber.d("lastLocation failure ${failure.message}")
    }

to receive coordinate.

Post a Comment for "Fusedlocationclient Not Calling Onlocationresult"