Cordova Geolocalización plugin devolver objeto de posición vacía en Android
He tenido algunos problemas con el complemento Geolocation Cordova (org.apache.cordova.geolocation). Funciona bien en iOS, pero no en absoluto en Android.
Según entiendo, el complemento utilizado para incluir el código de Android nativo, pero esto se eliminó en algún momento, porque era demasiado buggy / lento y la aplicación web nativa HTML5 era mucho más estable y rápido.
- Uso de javascript para capturar fotos desde iPhone / Android Cámara
- Html5 requiere validación trabajando muy bien en el navegador pero no en la aplicación de phonegap
- Icono de la aplicación para Android en Phonegap
- Forzar entrada numérica al ver el sitio web en Android e iOS
- ¿Cómo puedo buscar una cadena de texto en la aplicación nativa de Google Maps de PhoneGap en iOS AND Android?
Si utilizo la última versión de plugin (0.3.2) que todavía tiene el código nativo, funciona (pero lento y de hecho, no siempre). Pero cuando vuelve, el objeto de posición siempre se rellena.
Si utilizo la versión de plugin más reciente (1.0.1), getCurrentPosition () devuelve inmediatamente con un objeto vacío ({}). No produce un error.
Si elimino completamente el complemento y agrego los permisos manualmente al proyecto de Android:
<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" />
Lo mismo ocurre. Simplemente no puedo conseguir que funcione, pero no tiene sentido. No se muestran errores en la consola de Android. ¿Alguna idea?
- PhoneGap html5 app en Android 4.0 prensa larga
- ¿Puedo acceder mediante programación a los sensores de un smartphone a través del navegador y JavaScript?
- El texto del marcador de posición para una entrada type = "number" no se muestra en el webkit ICS
- ¿Es posible evitar los reproductores de video nativos en dispositivos móviles?
- ¿Puede Android cache el video HTML5 con el manifiesto de caché sin conexión?
- LocalStorage html5 no funciona en WebView en el dispositivo Samsung Android
- ¿Es posible construir una aplicación Android con PhoneGap estrictamente dentro de Visual Studio?
- android: cómo personalizar <select> cuadro de diálogo emergente en webview
OK, después de un largo tiempo de depuración, encontré el problema. Aparentemente, la función getCurrentPosition () devuelve un objeto 'especial' en Android, que se evalúa a {} cuando se utiliza JSON.stringify (). Si he enviado el objeto de retorno sin procesar a la consola, resultó que no estaba vacío en absoluto.
Así, después de los ajustes ridículos arregló mi código:
navigator.geolocation.getCurrentPosition(function (position) { var positionObject = {}; if ('coords' in position) { positionObject.coords = {}; if ('latitude' in position.coords) { positionObject.coords.latitude = position.coords.latitude; } if ('longitude' in position.coords) { positionObject.coords.longitude = position.coords.longitude; } if ('accuracy' in position.coords) { positionObject.coords.accuracy = position.coords.accuracy; } if ('altitude' in position.coords) { positionObject.coords.altitude = position.coords.altitude; } if ('altitudeAccuracy' in position.coords) { positionObject.coords.altitudeAccuracy = position.coords.altitudeAccuracy; } if ('heading' in position.coords) { positionObject.coords.heading = position.coords.heading; } if ('speed' in position.coords) { positionObject.coords.speed = position.coords.speed; } } if ('timestamp' in position) { positionObject.timestamp = position.timestamp; } // Use the positionObject instead of the position 'object' alert(JSON.stringify(positionObject)); }
IOS funciona bien sin los ajustes anteriores, pero como mi aplicación es una aplicación Phonegap, siempre aplico lo anterior.
El objeto de Geolocation
pasó a las devoluciones de llamada en navigator.geolocation.getCurrentLocation()
contiene dos colectores de prototipo coords
y timestamp
, lo que significa que hasOwnProperty
devolverá false, que supongo que JSON.stringify
excluye.
Al registrar todas las llaves en el objeto consigo lo siguiente:
[object Geoposition] .coords [object Coordinates] .latitude .longitude .altitude .accuracy .altitudeAccuracy .heading .speed .timestamp
Sin embargo, estos valores son válidos cuando se accede normalmente.
Con Angular, puede solucionar esto con:
location = angular.copy(location)
- OnKeyDown no siempre se llama en la aplicación para Android
- Android – cambia el estado de un switch de forma programática sin activar OnCheckChanged listener