Locator.kt 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package ru.yotc.myapplication
  2. import android.Manifest
  3. import android.annotation.SuppressLint
  4. import android.content.pm.PackageManager
  5. import android.os.Bundle
  6. import android.os.Looper
  7. import android.view.View
  8. import android.widget.Toast
  9. import androidx.appcompat.app.AppCompatActivity
  10. import androidx.core.app.ActivityCompat
  11. import androidx.core.content.ContextCompat
  12. import com.google.android.gms.location.*
  13. /*
  14. В манифест добавить разрешеня на геолокацию
  15. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  16. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  17. */
  18. class MainActivity : AppCompatActivity() {
  19. private lateinit var fusedLocationClient: FusedLocationProviderClient
  20. private lateinit var mLocationRequest: LocationRequest
  21. override fun onCreate(savedInstanceState: Bundle?) {
  22. super.onCreate(savedInstanceState)
  23. setContentView(R.layout.activity_main)
  24. fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
  25. checkPermission()
  26. }
  27. private fun checkPermission(){
  28. if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
  29. ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
  30. {
  31. // нет разрешений
  32. val permissions = arrayOf(
  33. Manifest.permission.ACCESS_FINE_LOCATION,
  34. Manifest.permission.ACCESS_COARSE_LOCATION
  35. )
  36. ActivityCompat.requestPermissions(this, permissions, 0)
  37. } else {
  38. mLocationRequest = LocationRequest()
  39. mLocationRequest.interval = 10000
  40. mLocationRequest.fastestInterval = 1000
  41. mLocationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
  42. fusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.myLooper())
  43. }
  44. }
  45. override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>,
  46. grantResults: IntArray) {
  47. when (requestCode) {
  48. 1 -> {
  49. if (!grantResults.isEmpty() && grantResults[0] ==
  50. PackageManager.PERMISSION_GRANTED)
  51. {
  52. if ((ContextCompat.checkSelfPermission(this@MainActivity, Manifest.permission.ACCESS_FINE_LOCATION) === PackageManager.PERMISSION_GRANTED))
  53. {
  54. // получили разрешение - снова запускаем запрос разрешений, чтобы попасть в цикл опроса геолокации
  55. checkPermission()
  56. }
  57. } else {
  58. Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show()
  59. }
  60. return
  61. }
  62. }
  63. }
  64. private var mLocationCallback: LocationCallback = object : LocationCallback() {
  65. override fun onLocationResult(locationResult: LocationResult) {
  66. if (!locationResult.locations.isEmpty()) {
  67. val locIndex = locationResult.locations.size - 1
  68. val lon = locationResult.locations[locIndex].longitude
  69. val lat = locationResult.locations[locIndex].latitude
  70. onGetCoordinates(lat, lon)
  71. }
  72. }
  73. }
  74. fun onGetCoordinates(lat: Double, lon: Double){
  75. // завершаем цикл опроса
  76. fusedLocationClient.removeLocationUpdates(mLocationCallback)
  77. // тут делаем что хотели с координатами
  78. Toast.makeText(this, "${lat}, ${lon}", Toast.LENGTH_LONG).show()
  79. }
  80. }