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"