ubicacion studio segundo pokemon plano permisos mejorar combinada celulares alta android cordova geolocation cordova-plugins

android - studio - La precisión de geolocalización de Córdoba se limita a 10 metros



ubicacion en segundo plano android (2)

Actualización: es un problema del servicio Google Play, se informa internamente here y se solucionará a partir de la versión 13.4.0

Usamos el here y el método navigator.geolocation.watchPosition() con la opción enableHighAccuracy: true para rastrear la ubicación del usuario y obtener los resultados más precisos.

Nuestra aplicación ha existido por más de 1 año y solíamos tener problemas con cualquier dispositivo para obtener una muy buena precisión de ubicación, 4/6 metros cuando el exterior y el cielo están despejados.

Últimamente, muchos de nuestros usuarios informan que no pueden obtener una precisión inferior a 10 m sin importar lo que hagan.

Decidimos probarlo nosotros mismos y encontramos el mismo problema. Inicialmente, pensamos que habíamos introducido algún error en nuestra última versión, habíamos comprobado todo de forma triple, pero no hicimos cambios en el código / las dependencias relacionadas con la geolocalización.

También probamos versiones anteriores de nuestra aplicación, donde estamos seguros de que era posible obtener una precisión de 4 m, pero sorprendentemente tampoco funcionan, la precisión está limitada a 10 m.

Probamos diferentes versiones de Android y podemos reproducir el problema en cualquier plataforma de 5 (Lollipop) a 8 (Oreo). También tenemos el mismo problema en iOS 10/11. Una vez más, no hemos actualizado la aplicación en meses.

Hay una pregunta reciente sobre el mismo tema here :

Alguien más está teniendo el mismo problema con el código nativo de Android here

¿Alguien sabe qué está pasando? ¿Es un problema de permiso? Los servicios de localización también están configurados en Alta precisión.

En aras de la integridad, podemos obtener una precisión de 3/4 metros utilizando la versión anterior (2.x) de este plugin

¿Es la única manera de ir?

Preferiríamos no introducir una dependencia adicional para algo que funcionaba tan bien fuera de la caja.

Muchas gracias


A quien corresponda, es un problema de Google Play Services, informado internamente here y se solucionará a partir de la versión 13.4.0

Actualización: resuelto después de actualizar a Play Services 14.3.66, ¡con una precisión de 4m nuevamente!


Mirando el código fuente:

Plugin viejo (2.x) Source :

watchPosition: function(success, error, args) { var win = function() { var geo = cordova.require(''cordova/modulemapper'').getOriginalSymbol(window, ''navigator.geolocation''); geo.watchPosition(success, error, { enableHighAccuracy: args[1] }); }; exec(win, error, "Geolocation", "getPermission", []); },

Nuevo Plugin (maestro) Source :

watchPosition: function(success, error, args) { var pluginWatchId = utils.createUUID(); var win = function() { var geo = cordova.require(''cordova/modulemapper'').getOriginalSymbol(window, ''navigator.geolocation''); pluginToNativeWatchMap[pluginWatchId] = geo.watchPosition(success, error, args); }; var fail = function() { if (error) { error(new PositionError(PositionError.PERMISSION_DENIED, ''Illegal Access'')); } }; exec(win, fail, "Geolocation", "getPermission", []); return pluginWatchId; },

En el código del complemento OLD, enableHighAccuracy es un conjunto booleano (arg1 de la matriz).

Con la NUEVA versión de complemento, debe pasar arg como JSON con ese conjunto de indicadores: {enableHighAccuracy: true} para reproducir la misma llamada a la función geo.watchPosition con alta precisión.

Vieja forma:

navigator.geolocation.watchPosition(geolocationSuccess, geolocationError, [false,true]);

Nueva manera:

navigator.geolocation.watchPosition(geolocationSuccess, geolocationError, { enableHighAccuracy: true });