ANDROID

Getting User Location in Android App

How to easily and efficiently implement a location service into your android app.

Oussama Cherfaoui
3 min readMay 31, 2023
A picture showing google maps on a smartphone.
Photo by Tamas Tuzes-Katai on Unsplash

Learn how to implement location service into your android app using Kotlin and the Fused Location Provider API. This article will guide you through the process of retrieving the user’s current location and handling common errors that may occur. By the end of this article, you’ll have the necessary knowledge to create a location service into your android app.

Add dependencies

To implement location service in your Android app, you need to add these two dependencies to the build.gradle App file

  • The first dependency provides the necessary APIs for retrieving the user’s current location.
  • The second one allows you to retrieve the user’s location in a coroutine scope, which can help improve the performance of your app and prevent any blocking of the UI thread.

Adding permissions to the manifest

To retrieve the user’s location in your Android app, you’ll need to add the necessary location permissions to your app’s manifest file. These permissions include:

  • INTERNET permission is required for making network requests to retrieve location data.
  • ACCESS_COARSE_LOCATION permission provides approximate location data.
  • ACCESS_FINE_LOCATION permission provides more precise location data .

According to the official Android documentation, the ACCESS_COARSE_LOCATION permission should always be included, and the ACCESS_FINE_LOCATION permission should be included only if your app benefits from precise location access. You can refer to the official documentation for more information on location permissions and their usage in Android apps.

Location Service implementation

Now we’ll see how the location service is implemented:

  • The hasPermissions function is a Kotlin extension function and get a at least one permission as parameter and return true if all the passed permissions are granted.
  • The LocationServiceException sealed class handle all the possible thrown exceptions when getting the user permission so we can catch them in a single catch block.
  • The getCurrentLocation function will return the location, and throw exceptions if the location permissions are not granted, the GPS is not activated or the Network is not available. We’re using The fused location provider API to get the current user location. The await() function is used to wait for the result of the location retrieval task without blocking the thread. If any error occurs during the location retrieval process, the function throws an Exception .

Creating the UI

We’ll create now a simple UI using jetpack compose to see how the Location Service works, but if you’re an xml developer the location service implementation will work just fine:

Here we’re creating a simple UI of a button that will invoke the getCurrentLocation function, and a text for showing the latitude and longitude.

  • permissionRequest is for requesting the permissions when the MissingPermissionException exception is thrown, check this article for more information about handling runtime permissions in jetpack compose.
  • scope is for launching a coroutine when the button is clicked and calling the getCurrentLocation function.

Calling the UI composable in the main activity

And finally we’ll simply call the getCurrentLocationIU composable in the main activity.

Conclusion

In conclusion, the fused location provider API in Android provides an easy and efficient way to retrieve the user’s location. By handling location-related exceptions appropriately and respecting the user’s privacy, you can create powerful and dynamic applications that improve the user experience.

--

--