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()
}
}