First I have added fusedLocationClient as private member variable:
private lateinit var fusedLocationClient: FusedLocationProviderClientWhere FusedLocationProviderClient is imported from:
implementation 'com.google.android.gms:play-services-location:19.0.1'In onCreate I have initialized fusedLocationClient:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }I need line like
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())For that I need locationRequest and locationCallback
Both locationRequest and locationCallback I have declared as member variables:
private lateinit var locationCallback: LocationCallback private lateinit var locationRequest: LocationRequestlocationRequest:
locationRequest = LocationRequest.create().apply { interval = 5000 fastestInterval = 50000 smallestDisplacement = 170f // 170 m = 0.1 mile priority = LocationRequest.PRIORITY_HIGH_ACCURACY }locationCallback:
locationCallback = object : LocationCallback() { override fun onLocationResult(locationResult: LocationResult) { locationResult ?: return if (locationResult.locations.isNotEmpty()) { // get latest location val location = locationResult.lastLocation if (location != null) { println(location.latitude.toString()) println(location.longitude.toString()) } } } }In app\src\main\AndroidManifest.xml I have added permissions:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />And check for permission:
if (ActivityCompat.checkSelfPermission( this, Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission( this, Manifest.permission.ACCESS_COARSE_LOCATION ) != PackageManager.PERMISSION_GRANTED ) { if (ActivityCompat.shouldShowRequestPermissionRationale( this as Activity, Manifest.permission.ACCESS_FINE_LOCATION ) ) { return } else { ActivityCompat.requestPermissions( this, arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, ) , 99 ) } }At the end my MainActivity.kt looks like:
package com.milosev.requestlocationupdates import android.Manifest import android.app.Activity import android.content.pm.PackageManager import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.os.Looper import android.view.View import androidx.core.app.ActivityCompat import com.google.android.gms.location.* class MainActivity : AppCompatActivity() { private lateinit var fusedLocationClient: FusedLocationProviderClient private lateinit var locationCallback: LocationCallback private lateinit var locationRequest: LocationRequest override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) } fun requestLocationUpdatesClick(view: View) { if (ActivityCompat.checkSelfPermission( this, Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission( this, Manifest.permission.ACCESS_COARSE_LOCATION ) != PackageManager.PERMISSION_GRANTED ) { if (ActivityCompat.shouldShowRequestPermissionRationale( this as Activity, Manifest.permission.ACCESS_FINE_LOCATION ) ) { return } else { ActivityCompat.requestPermissions( this, arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, ) , 99 ) } } locationRequest = LocationRequest.create().apply { interval = 5000 fastestInterval = 50000 smallestDisplacement = 170f // 170 m = 0.1 mile priority = LocationRequest.PRIORITY_HIGH_ACCURACY } locationCallback = object : LocationCallback() { override fun onLocationResult(locationResult: LocationResult) { locationResult ?: return if (locationResult.locations.isNotEmpty()) { // get latest location val location = locationResult.lastLocation if (location != null) { println(location.latitude.toString()) println(location.longitude.toString()) } } } } fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper()) } }