Paweł
Paweł

Reputation: 1271

Determining if geolocation enabled with react native

Building an app with RN I use the following to receive user's location :

 navigator.geolocation.getCurrentPosition(
  (position) => {
   //do stuff with location
  },
  (error) => {
    //error or locaiton not allowed
  },
  {enableHighAccuracy: true, timeout: 20000, maximumAge: 1000}
);

Which immediately invokes the inquiry for user to accept geolocation permissions. What I'm trying to achieve now is to have an explicit screen before prompting user to click on a button to accept those permissions. In order to get there, I need some way to check if he has accepted those permissions before or not. Caching it in storage would be a bad solution - it might go out of sync if user changes permissions in settings.

How can I check if user has accepted geolocation permissions without triggering the permission alert?

Upvotes: 20

Views: 23871

Answers (3)

abbas.aniefa
abbas.aniefa

Reputation: 2905

Check this library, this would help you to check location is enabled or not.

https://www.npmjs.com/package/react-native-device-info#isLocationEnabled

Note : Above will not check permission enabled on not. It will just check location truned on or not

Upvotes: 5

Maniruzzaman Akash
Maniruzzaman Akash

Reputation: 5025

In v2.x.x of react-native-permissions (https://github.com/react-native-community/react-native-permissions)

import { Platform } from "react-native";
import { PERMISSIONS, request } from "react-native-permissions";
import * as Geolocation from "@react-native-community/geolocation";

try {
request(
    Platform.select({
      android: PERMISSIONS.ANDROID.ACCESS_FINE_LOCATION,
      ios: PERMISSIONS.IOS.LOCATION_WHEN_IN_USE
    })
  ).then(res => {
    if (res == "granted") {
      Geolocation.getCurrentPosition( // do location staffs);
      Geolocation.watchPosition( // do watch location staffs );
    } else {
      // console.log("Location is not enabled");
    }
  });
} catch (error) {
  console.log("location set error:", error);
}

Upvotes: 9

Marcelo Cordini
Marcelo Cordini

Reputation: 166

You can use this library https://github.com/yonahforst/react-native-permissions to check if user has accepted location permission. Like this:

Permissions.getPermissionStatus('location')
  .then(response => {
    this.setState({ locationPermission: response })
  })

Upvotes: 14

Related Questions