Reading Time: 2 minutes
Today I’m going to show you how to obtain location using React Native and Expo:
We’re going to use the library expo-location (https://docs.expo.dev/versions/latest/sdk/location/)
First, let’s install it:
expo install expo-location
This library automatically adds the necessary permissions to the Android Manifest (required to use location):
ACCESS_COARSE_LOCATION
: for approximate device locationACCESS_FINE_LOCATION
: for precise device locationFOREGROUND_SERVICE
: to subscribe to location updates while the app is in use
However, it doesn’t add the permission to use background location: ACCESS_BACKGROUND_LOCATION
. If we want to add that permission, we’ll have to do it manually in app.js.
Now we import the library to use it in our code:
import * as Location from 'expo-location';
Once imported, we go to the render function and add the necessary methods to obtain the location.
const Component = ({ navigation }) => { // State to store the obtained location const [location, setLocation] = useState(null); // Method to request location permissions and get location const getLocationPermission = async () => { let { status } = await Location.requestForegroundPermissionsAsync(); if (status !== 'granted') { alert('Permission to access location was denied'); return; } let location = await Location.getCurrentPositionAsync({}); setLocation(location); console.log('Location: ' + JSON.stringify(location) + " Latitude: " + location.coords.latitude + " Longitude: " + location.coords.longitude); }; return () }; export default Component;
Now let me explain the code.
First, we create a state to store the obtained location:
const [location, setLocation] = useState(null);
The method const getLocationPermission = async () => {
is the one that allows us to obtain the location.
- First, it requests location permission.
- If permission is granted, it returns the location.
To get the coordinates, we use the parameters of the returned object:
location.coords.latitude
location.coords.longitude