import android.Manifest import android.annotation.SuppressLint import android.content.pm.PackageManager import android.os.Bundle import android.os.Looper import android.view.View import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import com.google.android.gms.location.* /* В манифест добавить разрешеня на геолокацию */ class MainActivity : AppCompatActivity() { private lateinit var fusedLocationClient: FusedLocationProviderClient private lateinit var mLocationRequest: LocationRequest override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) checkPermission() } private fun checkPermission(){ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // нет разрешений val permissions = arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION ) ActivityCompat.requestPermissions(this, permissions, 0) } else { mLocationRequest = LocationRequest() mLocationRequest.interval = 10000 mLocationRequest.fastestInterval = 1000 mLocationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY fusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.myLooper()) } } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { when (requestCode) { 1 -> { if (!grantResults.isEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { if ((ContextCompat.checkSelfPermission(this@MainActivity, Manifest.permission.ACCESS_FINE_LOCATION) === PackageManager.PERMISSION_GRANTED)) { // получили разрешение - снова запускаем запрос разрешений, чтобы попасть в цикл опроса геолокации checkPermission() } } else { Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show() } return } } } private var mLocationCallback: LocationCallback = object : LocationCallback() { override fun onLocationResult(locationResult: LocationResult) { if (!locationResult.locations.isEmpty()) { val locIndex = locationResult.locations.size - 1 val lon = locationResult.locations[locIndex].longitude val lat = locationResult.locations[locIndex].latitude onGetCoordinates(lat, lon) } } } fun onGetCoordinates(lat: Double, lon: Double){ // завершаем цикл опроса fusedLocationClient.removeLocationUpdates(mLocationCallback) // тут делаем что хотели с координатами Toast.makeText(this, "${lat}, ${lon}", Toast.LENGTH_LONG).show() } }