NativeScript / nativescript-geolocation

Geolocation plugin to use for getting current location, monitor movement, etc
Apache License 2.0
139 stars 77 forks source link

LocationRequest() from plugin crash the app [BUG] #259

Open vforv opened 4 years ago

vforv commented 4 years ago

After I call this

Geolocation.enableLocationRequest().then(() => {
      Geolocation.getCurrentLocation({}).then(location => {
        console.log(location)
      }).catch(error => {
        console.log(error)
      });
  });

App just crash... No any log displayed after crush

Using nativescript 6.5.0 with Angular 8.0

I am using also Android device with wifi and geolocation on

UPDATE

After debugging I found line which crash the app it is 91 function _getLocationRequest(options) var mLocationRequest = new com.google.android.gms.location.LocationRequest()

Cloudxyz commented 4 years ago

I have this issue too, i not found the line, because i dont know where search

juanpicuervo commented 4 years ago

I have this issue too, i cannot use this feature :(

vforv commented 4 years ago

add this to the app.gradle

project.ext {
       googlePlayServicesVersion = "15.0.1"
}
dependencies {
   def googlePlayServicesVersion = project.googlePlayServicesVersion
   compile "com.google.android.gms:play-services-location:$googlePlayServicesVersion"
}
neil-119 commented 4 years ago

Adding on to vforv's answer, I created a file called before-plugins.gradle in the same directory as app.gradle and added in the following content (NativeScript loads the file automatically):

android {
    project.ext { 
        googlePlayServicesVersion = "16.+"
    }
    dependencies {
        def googlePlayServicesVersion = project.googlePlayServicesVersion
        compile "com.google.android.gms:play-services-location:$googlePlayServicesVersion"
    }
}

This solved it for me.

aosi87 commented 4 years ago

I found that it could be a combination of things, please make sure to include this information in the readme:

If you guys installed this using the companion app (Nativescript-sidekick) you will find that you MUST use the tool to install dependencies and plugins, if for some reason you switch to the CLI, make sure to delete and recreate your configurations, looks like the files created by these are different.

So in my case:

Now, this didn't solve my problem, I use a combination of GoogleMaps and Geolocalization, and other plugins, these plugins set up or add/use configurations of GooglePlayServices, this is a problem, it means we need to match the version of the services, in this case, I will use the nice hook that @neil-119 uses, ( i didn't know Nativescript handles before, after plugins.). This makes my configuration work.

Now, something I found by playing around:

You can do this:

Geo.enableLocationRequest();
Geo.getCurrentLocation(
{ desiredAccuracy: Accuracy.high/any, maximumAge: 5000, timeout: 10000 }
           ).then((result) => {
                console.log(JSON.stringify(result));
            })
            .catch((err) => {
                console.log("loc error", err);
            });

And also this:

Geo.enableLocationRequest(true)
        .then(() => {
            Geo.isEnabled().then(isLocationEnabled => {
                console.log('result is '+isLocationEnabled);
                if(!isLocationEnabled) {
                    return;
                }

                Geolocation.getCurrentLocation({}) // default
                .then(result => {
                    console.log('loc result', result);
                })
                .catch(e => {
                    console.log('loc error', e);
                });
            });
        });

I hope this solves problems and speeds up your dev, it took me almost a day to find these problems for my current configuration. Cheers.