Bmaed Riasbet
Bmaed Riasbet

Reputation: 14998

react native navigator.geolocation.getCurrentPosition not working

I am using a real android device (version 5.1)

I am able to determine my position using react-native-maps (correct blue point position on map inside my app ) + I am able use google maps app and go to my position (GPS works).

I am using a big timeout, toggling enableHighAccuracy to true and false, remove options ... etc . all failed to get navigator.geolocation to get data.

Here is my code:

var options = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0
};

function success(pos) {
  var crd = pos.coords;

  console.log('Your current position is:');
  console.log(`Latitude : ${crd.latitude}`);
  console.log(`Longitude: ${crd.longitude}`);
  console.log(`More or less ${crd.accuracy} meters.`);
};

function error(err) {
  console.warn(`ERROR(${err.code}): ${err.message}`);
};

navigator.geolocation.getCurrentPosition(success, error, options);

I am getting : ERROR(3): Location request timed out

Upvotes: 13

Views: 35657

Answers (6)

Abhay Pandey
Abhay Pandey

Reputation: 11

getting the user's current location with @react-native-community/geolocation is almost correct

import Geolocation from "@react-native-community/geolocation";

const [location, setLocation] = useState(null);
 useEffect(() => {
        Geolocation.getCurrentPosition(
            (position) => {
                const { latitude, longitude } = position.coords;
                setLocation({ latitude, longitude });
            },
            (error) => console.log(error),
            { enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 }
        );
    }, []);

On Android and iOS, you need to ask for location permissions.

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

Upvotes: 0

Marlon Englemam
Marlon Englemam

Reputation: 386

Removing maximumAge solved the issue here! Just in case someone is still having this problem in 2019 or later

Upvotes: 5

Sandip Singh
Sandip Singh

Reputation: 386

I know it's too late, but it can help someone else.

Geolocation has been extracted from react native .60 version. If you need an alternative solution

Install react-native-community/geolocation :

npm install @react-native-community/geolocation --save

react-native link @react-native-community/geolocation

Then, to request access to location, you need to add the following line to your app's AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Usage :

import Geolocation from '@react-native-community/geolocation';

Geolocation.getCurrentPosition(info => console.log(info));

Upvotes: 12

David
David

Reputation: 1591

To request access to location, you need to add the following line to your app's AndroidManifest.xml: <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />.

For an android with API >= 23 you need to require an additional step to check for: you need to request the ACCESS_FINE_LOCATION permission using the PermissionsAndroid API.

PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
      {
        title: "Location Accessing Permission",
        message: "App needs access to your location"
      }
    );

And only after that run navigator.geolocation.getCurrentPosition(success, error, options);

Upvotes: 3

Johnmark Hugo
Johnmark Hugo

Reputation: 19

I used this and it works fine: {enableHighAccuracy: false, timeout: 50000}

async watchPosition() {
    console.log('watchPosition');        
    await navigator.geolocation.getCurrentPosition(
        (position) => {
          console.log('Position -> ',position);
        },
        (error) => console.log(error)
        {enableHighAccuracy: false, timeout: 50000}
    );
}

Upvotes: 1

sebastianf182
sebastianf182

Reputation: 9978

Two things.

1) That is actually not a high timeout for a high accuracy response if the coordinates are not cached 2) Some devices have problems with the highAccuracy setting.

Try putting 30000 ms as timeout and remove the high accuracy until you find one setting that works.

Edit: I found the long bug I was remembering form React Native: https://github.com/facebook/react-native/issues/7495

So, try this:

1) Remove maximumAge property 2) If that does not work, remove the third parameter and use the default values from the native module. Meaning, don't send the options object. That should work.

Upvotes: 10

Related Questions