| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package ru.yotc.myapplication
- 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.*
- /*
- В манифест добавить разрешеня на геолокацию
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
- <uses-permission android:name="android.permission.ACCESS_COARSE_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<String>,
- 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()
- }
- }
|