Sometimes, we need to add the current location of the users to the project, that’s why we are creating this small project for you. Hello coders, welcome to Techpass Master, In this post, we’re going to learn, How to Get Current Location in Android Studio using Kotlin programming language. This project will help you to get the current location of the users, so without any further discussion let’s start building the project 🙂
Page Contents
Get Current Location in Android Studio using Kotlin
First, you have to need to create a project to get your current location, below are the steps you can follow step by step.
Step 1: Create A Project For Real time location
- Start a new Android Studio Project.
- Select empty Activity and click Next.
- Project Name: RealTimeLocation.
- Choose Language: Kotlin.
- Now click Finish.
- Your project is ready now.
After building the project, you will see your project is ready to start building an app.:
Step 2: Enable View Binding
buildFeatures{ viewBinding=true }
Step 3: Add Permission
Go to your android studio project. Open AndroidManifest.xml and add INTERNET permission for network requests and LOCATION permission for the location.
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Now we are going to design a layout for showing the current latitude, longitude, Country Name, Locality, and Address.
Step 4: Open Main XML Layout and Write UI Code
Now open activity_main.xml and add the below code. In this layout, we’ll design the UI of the Real time location App.
<?xml version="1.0" encoding="utf-8"?> <!-- Created by Techpass Master.--> <!-- Website - www.techpassmaster.com--> <!-- Youtube - Techpass Master--> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/tvTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="14dp" android:fontFamily="cursive" android:gravity="center" android:text="--- Get Current Location ---" android:textColor="#651FFF" android:textSize="28sp" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/tv_latitude" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="42dp" android:gravity="center" android:text="Latitude" android:textColor="@color/black" android:textSize="16sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvTitle" /> <TextView android:id="@+id/tv_longitude" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="42dp" android:text="Longitude" android:textColor="@color/black" android:textSize="16sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_latitude" /> <TextView android:id="@+id/tv_countryName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="42dp" android:gravity="center" android:text="Country Name" android:textColor="@color/black" android:textSize="16sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_longitude" /> <TextView android:id="@+id/tv_Locality" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="42dp" android:gravity="center" android:text="Locality" android:textColor="@color/black" android:textSize="16sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_countryName" /> <TextView android:id="@+id/tv_address" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="42dp" android:gravity="center" android:text="Address" android:textColor="@color/black" android:textSize="16sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_Locality" /> <Button android:id="@+id/btn_location" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Get My Current Location" android:textAllCaps="false" android:textSize="16sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_marginBottom="16dp" app:layout_constraintStart_toStartOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
After adding the above (XML) code, let’s write the logic to get the real-time location.
Step 5: Open Main Activity and Write Logic for Location
First, we will bind the layout to the activity.
private lateinit var mainBinding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) mainBinding = ActivityMainBinding.inflate(layoutInflater) setContentView(mainBinding.root) }
After binding the layout, we have to initialize the location services for the location, for that just you have to create a variable (mFusedLocationClient).
private lateinit var mFusedLocationClient: FusedLocationProviderClient Now initialize the location service. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) mainBinding = ActivityMainBinding.inflate(layoutInflater) setContentView(mainBinding.root) mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
Now, we will check whether the location is enabled or not for that we have to create a function- isLocationEnabled(). This function will be responsible to check whether the location is enabled or not and it will return the true/false value.
private fun isLocationEnabled(): Boolean { val locationManager: LocationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled( LocationManager.NETWORK_PROVIDER ) }
Now, we have to create the function and override the function for checking the permission.
private fun checkPermissions(): Boolean { if (ActivityCompat.checkSelfPermission( this, Manifest.permission.ACCESS_COARSE_LOCATION ) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission( this, Manifest.permission.ACCESS_FINE_LOCATION ) == PackageManager.PERMISSION_GRANTED ) { return true } return false } private fun requestPermissions() { ActivityCompat.requestPermissions( this, arrayOf( Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION ), permissionId ) } @SuppressLint("MissingSuperCall") override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<String>, grantResults: IntArray ) { if (requestCode == permissionId) { if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) { getLocation() } } }
After checking the permission, we’ve to create one more function (getLocation()) which will be responsible to check permission and location, if permission is not granted then it will request you to grant the permission.
@SuppressLint("MissingPermission", "SetTextI18n") private fun getLocation() { if (checkPermissions()) { if (isLocationEnabled()) { mFusedLocationClient.lastLocation.addOnCompleteListener(this) { task -> val location: Location? = task.result if (location != null) { val geocoder = Geocoder(this, Locale.getDefault()) val list: List<Address> = geocoder.getFromLocation(location.latitude, location.longitude, 1) mainBinding.apply { tvLatitude.text = "Latitude\n${list[0].latitude}" tvLongitude.text = "Longitude\n${list[0].longitude}" tvCountryName.text = "Country Name\n${list[0].countryName}" tvLocality.text = "Locality\n${list[0].locality}" tvAddress.text = "Address\n${list[0].getAddressLine(0)}" } } } } else { Toast.makeText(this, "Please turn on location", Toast.LENGTH_LONG).show() val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS) startActivity(intent) } } else { requestPermissions() } }
After creating the all thing, we have to need to perform a click listener, this listener is responsible for to call getCurrent() function.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) mainBinding = ActivityMainBinding.inflate(layoutInflater) setContentView(mainBinding.root) mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this) this listner is responsoble to call getCurrent fuction // mainBinding.btnLocation.setOnClickListener { getLocation() } }
Complete code of the Get current location.
<?xml version="1.0" encoding="utf-8"?> <!-- Created by Techpass Master.--> <!-- Website - www.techpassmaster.com--> <!-- Youtube - Techpass Master--> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/tvTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="14dp" android:fontFamily="cursive" android:gravity="center" android:text="--- Get Current Location ---" android:textColor="#651FFF" android:textSize="28sp" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/tv_latitude" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="42dp" android:gravity="center" android:text="Latitude" android:textColor="@color/black" android:textSize="16sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvTitle" /> <TextView android:id="@+id/tv_longitude" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="42dp" android:text="Longitude" android:textColor="@color/black" android:textSize="16sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_latitude" /> <TextView android:id="@+id/tv_countryName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="42dp" android:gravity="center" android:text="Country Name" android:textColor="@color/black" android:textSize="16sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_longitude" /> <TextView android:id="@+id/tv_Locality" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="42dp" android:gravity="center" android:text="Locality" android:textColor="@color/black" android:textSize="16sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_countryName" /> <TextView android:id="@+id/tv_address" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="42dp" android:gravity="center" android:text="Address" android:textColor="@color/black" android:textSize="16sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_Locality" /> <Button android:id="@+id/btn_location" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Get My Current Location" android:textAllCaps="false" android:textSize="16sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_marginBottom="16dp" app:layout_constraintStart_toStartOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
package com.techpassmaster.getcurrentlocationkotlin import android.Manifest import android.annotation.SuppressLint import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.location.Address import android.location.Geocoder import android.location.Location import android.location.LocationManager import android.os.Bundle import android.provider.Settings import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import com.google.android.gms.location.FusedLocationProviderClient import com.google.android.gms.location.LocationServices import com.techpassmaster.getcurrentlocationkotlin.databinding.ActivityMainBinding import java.util.* class MainActivity : AppCompatActivity() { private lateinit var mainBinding: ActivityMainBinding private lateinit var mFusedLocationClient: FusedLocationProviderClient private val permissionId = 2 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) mainBinding = ActivityMainBinding.inflate(layoutInflater) setContentView(mainBinding.root) mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this) mainBinding.btnLocation.setOnClickListener { getLocation() } } @SuppressLint("MissingPermission", "SetTextI18n") private fun getLocation() { if (checkPermissions()) { if (isLocationEnabled()) { mFusedLocationClient.lastLocation.addOnCompleteListener(this) { task -> val location: Location? = task.result if (location != null) { val geocoder = Geocoder(this, Locale.getDefault()) val list: List<Address> = geocoder.getFromLocation(location.latitude, location.longitude, 1) mainBinding.apply { tvLatitude.text = "Latitude\n${list[0].latitude}" tvLongitude.text = "Longitude\n${list[0].longitude}" tvCountryName.text = "Country Name\n${list[0].countryName}" tvLocality.text = "Locality\n${list[0].locality}" tvAddress.text = "Address\n${list[0].getAddressLine(0)}" } } } } else { Toast.makeText(this, "Please turn on location", Toast.LENGTH_LONG).show() val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS) startActivity(intent) } } else { requestPermissions() } } private fun isLocationEnabled(): Boolean { val locationManager: LocationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled( LocationManager.NETWORK_PROVIDER ) } private fun checkPermissions(): Boolean { if (ActivityCompat.checkSelfPermission( this, Manifest.permission.ACCESS_COARSE_LOCATION ) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission( this, Manifest.permission.ACCESS_FINE_LOCATION ) == PackageManager.PERMISSION_GRANTED ) { return true } return false } private fun requestPermissions() { ActivityCompat.requestPermissions( this, arrayOf( Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION ), permissionId ) } @SuppressLint("MissingSuperCall") override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<String>, grantResults: IntArray ) { if (requestCode == permissionId) { if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) { getLocation() } } } }
Congratulations, all steps are done, now let’s run and test the application.
Recommended Reading:
- What Is Kotlin In Android?
- How To Make An Android App For Beginners
- Android Interview Questions For Fresher.
- How To Stop Computer From Auto-Locking Windows 10.
- How To Change Font On Facebook.
I hope you liked the post. If you have any questions regarding this post. Feel free to comment and share the post with your friends.
Happy Learning!!!
Super se bhi upar 😁👍👍
Most usefull app. Thank you sooo much. Sir ji
Thank Your 🙂
Não vejo o github dele para saber se o código está todo depreciado ou em partes. Não gosto de ler tanto assim, toda a explicação fragmentada, esse tipo de explicação afastas novos usuários de seu contato pessoal, não gosta de dinheiro?
Thank you so much!
best regard
I installed the app and it seems to work but the location never changes. on google maps i can see the location changing but in this app it is stuck at the first place when i first hit the get location button. Any thoughts as to what might be wrong?
Hi mark Fused Provider Last Location some times return null if you are trying first time or location is fetched first time.