Я использовал FusedLocation в одном из моих проектов Kotlin, я опубликую метод ниже.
Убедитесь, что ваша служба определения местоположения включена, и у пользователя уже запрашивается разрешение на доступ к местоположению, иначе не может быть обнаружено последнее местоположение.
fun getLocation(): Task<Location>? {
val mFusedLocationProviderClient: FusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(dashboardActivity)
if (ActivityCompat.checkSelfPermission(dashboardActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(dashboardActivity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
}
val location = mFusedLocationProviderClient.lastLocation
location.addOnCompleteListener { task ->
if (task.isSuccessful) {
val currentLocation = task.result
if (currentLocation != null) {
latitude = currentLocation.latitude
longitude = currentLocation.longitude
dashboardActivity.getLatLong(latitude.toString(), longitude.toString()) //this methods calls the collector geo-location service
} else {
val builder = AlertDialog.Builder(dashboardActivity)
builder.setTitle("Location On")
builder.setPositiveButton("Yes") { dialog, which ->
val viewIntent = Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)
dashboardActivity.startActivity(viewIntent)
}
builder.setNegativeButton("No") { dialog, which ->
Toast.makeText(dashboardActivity, "Please enable location service", Toast.LENGTH_SHORT).show()
}
val dialog: AlertDialog = builder.create()
dialog.show()
}
}
}
return location
}
Вместо использования addOnSuccessListener()
вместо этого я использовал addOnCompleteListener()
, я думаю, что это может быть проблемой.