React Native Geolocation GetCurrentPosition EnableHighAccuracy

Tags: , , ,



I am using Geolocation on Android to get a user’s position. I am a little bit confused about the EnableHighAccuracy setting. Basically, to make this work I have to set it to “true” for Android Simulator and to “false” for a physical device. Otherwise its broken and I get timeout error and no location.

Can someone please clarify why this might be the case? It seems strange that this one setting completely breaks it when it should not. I don’t know if this has perhaps something to do with device settings or something else. Seems a bit dangerous for production with this being so hacky. Thanks.

navigator.geolocation.getCurrentPosition(
 async (locationObj) => {
   //Some code
 },
 (error => Alert.alert("Could not get location"),
 { enableHighAccuracy: true, timeout: 15000 }
)

Answer

if you set “enableHighAccuracy” to true then it will use GPS and location will be accurate .

This is a bug in Geolocation . On Android it will timeout . if you want accurate location and want to enableHighAccuracy then you should use react-native-geolocation-service

As described in library

“This library is created in an attempt to fix the location timeout issue on android with the react-native’s current implementation of Geolocation API.”

Also recommended in official site of React Native

“On Android, this uses the android.location API. This API is not recommended by Google because it is less accurate and slower than the recommended Google Location Services API. In order to use it with React Native, use the react-native-geolocation-service module.”

Try this

...
import Geolocation from 'react-native-geolocation-service';
...

componentDidMount() {
    // Instead of navigator.geolocation, just use Geolocation.
    if (hasLocationPermission) {
        Geolocation.getCurrentPosition(
            (position) => {
                console.log(position);
            },
            (error) => {
                // See error code charts below.
                console.log(error.code, error.message);
            },
            { enableHighAccuracy: true, timeout: 15000, maximumAge: 10000 }
        );
    }
}


Source: stackoverflow