work plugin doesn cordovageolocation android cordova geolocation

plugin - La geolocalización de Phonegap/Cordova no funciona en Android



cordova plugin geolocation (12)

Creo que estás añadiendo plugin manualmente. use el comando: (estrictamente si está usando la compilación de CLI)

phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git

Estoy teniendo problemas para hacer que la Geolocalización funcione en Android en ambos emuladores (incluso cuando hago una geo fix través de telnet) y en el dispositivo. Funciona en iOS, WP8 y en el navegador.

Cuando solicito la ubicación del dispositivo utilizando el siguiente código, siempre recibo un error (en mi caso, la Retrieving your position failed for unknown reason. Con un código de error y un mensaje de error null ).

Código relacionado:

successHandler = (position) -> resolve App.Location.create lat: position.coords.latitude lng: position.coords.longitude errorHandler = (error) -> error = switch error.code when 1 App.LocationError.create message: ''You haven/'t shared your location.'' when 2 App.LocationError.create message: ''Couldn/'t detect your current location.'' when 3 App.LocationError.create message: ''Retrieving your position timeouted.'' else App.LocationError.create message: ''Retrieving your position failed for unknown reason. Error code: '' + error.code + ''. Error message: '' + error.message reject(error) options = maximumAge: Infinity # I also tried with 0 timeout: 60000 enableHighAccuracy: true navigator.geolocation.getCurrentPosition(successHandler, errorHandler, options)

plataformas / android / AndroidManifest.xml

<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" />

www / config.xml (por si acaso)

<feature name="Geolocation"> <param name="android-package" value="org.apache.cordova.GeoBroker" /> </feature>

Utilizando Cordova 3.1.0. Pruebas en Android 4.2. Plugin instalado. Cordova.js incluido en index.html (otros complementos como InAppBrowser funcionan bien).

$ cordova plugins ls [ ''org.apache.cordova.console'', ''org.apache.cordova.device'', ''org.apache.cordova.dialogs'', ''org.apache.cordova.geolocation'', ''org.apache.cordova.inappbrowser'', ''org.apache.cordova.vibration'' ]

No tengo ni idea ¿Me estoy perdiendo de algo?


En este hilo hay muchas respuestas buenas, gracias a todos. Me gustaría agregar mi solución en caso de que sb encuentre lo mismo.

Cuando inicié mi aplicación Cordova 3.5 en mi Nexus, el servicio de GPS no se inició después de esta línea:

navigator.geolocation.watchPosition(...);

En su lugar, recibí este mensaje:

07-02 14:31:09.932: D/PluginManager(27767): exec() call to unknown plugin: Geolocation

Estaba confundido porque no había ningún archivo Java Geolocation.java a pesar de la correcta instalación del complemento.

Cuando quedó claro por la respuesta de Natsu que el equipo de Cordova decidió invocar el objeto del navegador nativo , comenté el complemento de Geolocalización en cordova_plugins.js :

... { "file": "plugins/org.apache.cordova.geolocation/www/Position.js", "id": "org.apache.cordova.geolocation.Position", "clobbers": [ "Position" ] } /*---- , { "file": "plugins/org.apache.cordova.geolocation/www/geolocation.js", "id": "org.apache.cordova.geolocation.geolocation", "clobbers": [ "navigator.geolocation" ] } ----*/ , { "file": "plugins/org.apache.cordova.splashscreen/www/splashscreen.js", "id": "org.apache.cordova.splashscreen.SplashScreen", "clobbers": [ "navigator.splashscreen" ] }, ...

El resto de la instalación del plugin se mantuvo sin cambios. Así, el objeto original de Chrome no se aniquila y todo funciona bien.

Ahora estoy un poco inseguro de por qué el instalador del complemento agrega la entrada JSON a pesar de que dará lugar a un mal funcionamiento. Supongo que es solo una pequeña debilidad de diseño que no se puede corregir en este momento (o debería profundizar mucho más en la instalación del complemento).

EDITAR: No hay que olvidar descomentar los metadatos:

// "org.apache.cordova.geolocation": "0.3.8", ...


Mi solución fue usar el soporte nativo de geolocalización HTML5 para android / samsung si existiera:

// BEFORE the deviceready event has fired: // Check if HTML5 location support exists app.geolocation = false; if(navigator.geolocation) { app.geolocation = navigator.geolocation; } // AFTER the deviceready event: if(app.geolocation) { var locationService = app.geolocation; // native HTML5 geolocation } else { var locationService = navigator.geolocation; // cordova geolocation plugin } locationService.getCurrentPosition( function(pos) { }, function(error) { }, {enableHighAccuracy: true, timeout: 15000} );

Para todos los dispositivos samsung con los que probé, enableHighAccuracy tuvo que ser "verdadero" para que esto funcione. Con dispositivos que no sean Samsung, como el Nexus 7, enableHighAccuracy también podría configurarse como "falso".


Prueba esto,

Eliminar el plugin de geolocalización

cordova plugin rm org.apache.cordova.geolocation

Sin embargo, asegúrese de que las propiedades de AndroidManifest.xml y config.xml se mantengan como tales

(in app/res/xml/config.xml) <feature name="Geolocation"> <param name="android-package" value="org.apache.cordova.GeoBroker" /> </feature> (in app/AndroidManifest.xml) <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" />

Y para iOS en config.xml.

<feature name="Geolocation"> <param name="ios-package" value="CDVLocation" /> </feature>

Luego, genere la aplicación utilizando CLI y ejecute la aplicación en el dispositivo / emulador. Encontrará que ahora obtiene el código de error, así como el mensaje en error para obtener ubicación.

MÁS INFORMACIÓN: Incluso después de realizar los pasos anteriores, es posible que reciba el mensaje de tiempo de espera de manera constante, incluso después de configurar {timeout:10000} . La solución para esto es bastante divertida, simplemente apague su dispositivo, enciéndalo y vuelva a ejecutar la aplicación. ¡Deberías sorprenderte de ver que funciona, igual que yo!


Pruebe las opciones de esta manera para ver si funciona para usted como lo ha hecho para mí:

var options = { enableHighAccuracy: true }; navigator.geolocation.getCurrentPosition(onSuccess, onError, options);


Según https://issues.apache.org/jira/browse/CB-5977 , se ha eliminado la compatibilidad con el complemento de Android. Yi Ming Kuan dijo que "la razón por la que optamos por el CB-5977 es que la vista web en las nuevas versiones de Android obtendrá bloqueos de GPS más rápido que la API nativa, de ahí su eliminación. Al agregar el complemento en Android solo se agregan los permisos necesarios para usar HTML5 Geolocalización en su aplicación ".


Si el código de error era 3, verifique si la ubicación en la configuración está habilitada. Esto es trabajo para mí.



Tengo el mismo problema contigo, pero finalmente lo he resuelto.

El motivo de este problema es que siempre usamos la función navigator.geolocation.getCurrentPosition del navegador para ubicar la posición, por lo que debemos permitir que la aplicación use la implementación nativa de cordova en lugar de html5.


Usando Phonegap y Genymotion, nunca se llamaba al éxito Handler cuando intentaba obtener la posición actual . Añadiendo las opciones:

{enableHighAccuracy: true, timeout: 2*1000, maximumAge: 0}

arreglado esto para mi


añadiendo el siguiente permiso en el archivo manifiesto resuelto mi problema

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


  • Revise su (s) archivo (s) config.xml.

borrar esta linea

<preference name="permissions" value="none"/>

  • mira en tu AndroidManifest.xml

verifique que todas las líneas <uses-permission...> y la línea <uses-sdk...> estén ubicadas antes de la etiqueta <application...> .

Luego, desinstale la aplicación manualmente en el teléfono y vuelva a instalarla.

Espero que ayude.

lg

fastrde