Here I gave one example on how to get GPS location, problem with that solution is that location will be calculated once, and not any more, if you need like every few seconds to receive location, this solution will give you same location all the time.

Here is another example to receive updated location.
First I have added fusedLocationClient as private member variable:

private lateinit var fusedLocationClient: FusedLocationProviderClient
Where 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: LocationRequest
locationRequest:
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())
    }
}