Я нашел решение, это то, что происходит, когда местоположение равно нулю, это означает, что кэш местоположения был очищен, это происходит при выключении GPS, поэтому, когда я включал его, не было последнего местоположения, чтобы получить, что я сделал это было:
checkLocationSettings(callingActivity, turnOnGpsRequestCode, callback) {
// Location settings successful
mFusedLocationProviderClient!!.lastLocation
.addOnSuccessListener(callingActivity) {
location ->
if (location == null || location.accuracy > 100) {
mLocationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult?) {
stopLocationUpdates()
if (locationResult != null && locationResult.locations.isNotEmpty()) {
val newLocation = locationResult.locations[0]
callback.onCallback(Status.SUCCESS, newLocation)
} else {
callback.onCallback(Status.ERROR_LOCATION, null)
}
}
}
mFusedLocationProviderClient!!.requestLocationUpdates(getLocationRequest(),
mLocationCallback, null)
} else {
callback.onCallback(Status.SUCCESS, location)
}
}
.addOnFailureListener {
callback.onCallback(Status.ERROR_UNKNOWN, null)
}
}
Если местоположение пустое, начните запрашивать местоположения с помощью обратного вызова и
mFusedLocationProviderClient !!. RequestLocationUpdates (getLocationRequest (),
mLocationCallback, null)
Затем, когда вызывается обратный вызов, получается новое местоположение, и оно снова начинает получать местоположение.
Иногда бывает так, что при включении GPS местоположение не равно нулю, но точность плохая, поэтому я также проверяю, достаточно ли точна точность определения местоположения (для меня достаточно хорошо 100 метров)