ionic-team / capacitor-plugins

Official plugins for Capacitor ⚡️
508 stars 577 forks source link

@capacitor/geolocation - never returns error when GPS not able to return location #822

Closed ASHBAW closed 1 year ago

ASHBAW commented 2 years ago

I am not sure how to detect an error - no location service available (i.e. GPS may be enabled but the device is not able to get the location)?

I have tried wrapping

const coordinates = await Geolocation.getCurrentPosition();

in a try/catch block.

I have also tried the following:

Geolocation.getCurrentPosition().then((coordinates) => {
          console.log('Current lat:', coordinates.coords.latitude);
          console.log('Current long:', coordinates.coords.longitude);
      })
      .catch((error: any) => {
          console.log(error);
      });

by default the timeout is 10000 ms but I am not able to detect an error.

I might be missing something from the documentation that describes this?

When GPS is able to get the location everything works great.

Thanks for any insight.

muuvmuuv commented 2 years ago

Experiencing a similar issue where it never returns anything. We have no idea in which situations, but it let to deploying a version where users cannot interact with our app any longer.

droppy2014 commented 2 years ago

Same problem. Plugin doesn't work on fresh ionic 6 installation out of the box. Module doesn't produce errors and doesn't give result. Tested on emulator.

1

2

droppy2014 commented 2 years ago

I found it out. I set it to enableHighAccuracy:true and it found coordinates Geolocation.getCurrentPosition({enableHighAccuracy:true});

ASHBAW commented 2 years ago

I also have enableHighAccuracy:true and am able to obtain coordinates when GPS is available.

My issue is when GPS is enabled on a device but is not able to obtain location (say you are in a place where you cannot get the location even though the device has GPS enabled). I get no feedback/error indicating it was not able to obtain the location.

As stated in my first post I tried .catch and try/catch.

Do you have a way to catch an error in the event it is not able to obtain the location coordinates?

ASHBAW commented 2 years ago

For the time being I switched to another plugin. It catches error conditions. If this gets resolved I will try this plugin again.

daviesdoclc commented 2 years ago

For the time being I switched to another plugin. It catches error conditions. If this gets resolved I will try this plugin again.

Which plugin? I’m facing same issue and looking to switch.

MateiNenciu commented 2 years ago

Same problem here but when I restart my application and requesting the geolocation again, the whole app crashes. Is this happening for you also?

ASHBAW commented 2 years ago

I have an ionic 6 angular application using all capacitor plugins except for this one. For geolocation I am using this cordova plugin: https://www.npmjs.com/package/cordova-plugin-geolocation

npm i cordova-plugin-geolocation
npx cap sync
ASHBAW commented 2 years ago

Here is some more information on using capacitor and cordova: https://capacitorjs.com/docs/v2/cordova/using-cordova-plugins

marioshtika commented 2 years ago

Any update on this?

I am guessing the PositionOptions timeout (default 10000 milliseconds) is not working properly.

Any idea how we can check that?

piotr-cz commented 2 years ago

I have similar issue on a emulated device without a gps sensor (tablets/ TVs/ wearables).

My workaround is to reject promise manually after timeout, as in this Stack Overflow answer

FireStormHR commented 2 years ago

In @capacitor/geolocation: ^4.0.0 , Geolocation.checkPermissions() throws the wanted error when no location service available. Small timesaving tip, it literally throws an error instead of returning a rejected promise.

jcesarmobile commented 1 year ago

In version 4.0.0 of the plugin the logic of getCurrentPosition() has changed internally, give it a try. I can't reproduce, so I'm closing the issue. If somebody is still having issues with version 4.0.0 or newer, create a new issue providing a sample app and more information about the devices where the plugin is not resolving/rejecting.