Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Speed is “null” with geolocation plugin on Android 5+

speed value is always null in Android 5+. We use these:

  • Core: Cordova - 5.1.1
  • Platform: Cordova-Android 4.0.2
  • Plugin version: 1.0.1
  • Devices: Samsung Galaxy S4 (A5.0.1), Nexus 5 (A5.1.1), LG G3 Stylus D690 (A5.0.2).

We get this problem now after we updated to Android 5+.

Still works fine on Android 4 and iOS though. We tried both getCurrentPosition and watchPosition – no luck. HighAccuracy is true.

We had to implement workaround for Android 5 using getCurrentPosition (instead of perfectly working watchPosition for other OSes), which in many times results in calculating speed for some intervals as up to 400 km/h, while calculating more or less accurate speed overall.

  • Are there any permissions for Android 5 we are missing?
  • What can we do to resolve this issue?

We’d like to use one code for all platforms as it should be, and keep using watchPosition as it works good.

  • Any suggestions? Is this a known issue?

On a related note: Are there any known bugs/issues for Cordova with Galaxy devices in general? Thanks!

like image 496
andreyzenkov Avatar asked Jul 29 '15 15:07

andreyzenkov


2 Answers

navigator.geolocation.getCurrentPosition() is only check for GPS when option enableHighAccuracy is set as true(default). You could set enableHighAccuracy as false.

{enableHighAccuracy:false,maximumAge:Infinity, timeout:60000}

You may need following permissions

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

Hope it helps.

like image 192
Let'sRefactor Avatar answered Nov 15 '22 01:11

Let'sRefactor


Cordova doesn't provide any native code for the geolocation, it just add the permissions to activate the webview geolocation, so if something doesn't work it's the problem is on the chromium implementation.

You can try to use crosswalk plugin to see if geolocation works better there (it adds an updated chromium webview to your project), or use the version 0.3.6 of the plugin, as that was the latest release with native code.

EDIT: there was an error when passing the params from cordova to the webview geolocation that might cause your issue to, try with latest version of the plugin

cordova plugin add https://github.com/apache/cordova-plugin-geolocation
like image 42
jcesarmobile Avatar answered Nov 15 '22 01:11

jcesarmobile