android - ubicacion - la geolocalización del teléfono telefónico siempre falla en el tiempo de espera
obtener ubicacion android studio 2017 (11)
Estoy usando sencha-touch 2.0 y phonegap 2.0.0 en mi aplicación para recuperar la ubicación del usuario. Al ejecutar en mi locahost, todo funciona bien. Sin embargo, al cargar el archivo .apk en el dispositivo de mi aplicación android 15 (utilizando eclipse y el complemento adt), cada llamada a getCurrentLocation o watchPosition nunca se devuelve ...
aquí está mi código:
geoOn: function(){
var geoReady = navigator.geolocation || undefined;
var onSuccess = function(position){
Top5.app.alert(''Geolocation success ''+String(position.coords.latitude) + '' '' + String(position.coords.longitude),''Geolocation'');
var scope = Ext.getCmp(''nestedList'');
scope.updateDistance(position.coords);
};
var onFailure = function(error){Top5.app.alert(''Geolocation failed: ''+String(error.code) + '' ''+String(error.message),''Geolocation'');};
if (geoReady) {
this.watchId = navigator.geolocation.watchPosition(onSuccess ,onFailure,{timeout:6000,maximumAge: 3000,enableHighAccuracy: true});
}
else{
Ext.device.Geolocation.watchPosition({
frequency: 3000, // Update every 3 seconds
callback: function(position) {
this.updateDistance(position.coords);
},
failure: function() {
console.log(''Geolocation Failure!'');
},
scope:this
});
}
},
geoGet: function(){
var geoReady = navigator.geolocation || undefined;
if (geoReady) {
var onSuccess = function(position){
Top5.app.alert(''Geolocation successful!!!'');
var scope = Ext.getCmp(''nestedList'');
scope.updateDistance(position.coords);
};
var onFailure = function(error){Top5.app.alert(''Geolocation failed: ''+String(error.code) + '' ''+String(error.message),''Geolocation'');};
navigator.geolocation.getCurrentPosition(onSuccess,onFailure);
}
else{}
},
geoOff:function(){
var geoReady = navigator.geolocation || undefined;
if (geoReady) {
navigator.geolocation.clearWatch(this.watchId);
this.watchId = null;
}
else{
Ext.device.Geolocation.clearWatch();
}
},
updateDistance:function(coords){
Top5.app.alert(''updateDist'','''');
var scope = Ext.getCmp(''nestedList'');
var lat = coords.latitude,lon = coords.longitude;
var store = scope.getStore();
var i,record;
for(i = 0; i < store.data.all.length; i++)
{
record = store.data.all[i];
if(record.data.locationX){
record.set(''distance'',Top5.app.getDistance(record.data.locationX,record.data.locationY,lat,lon).toFixed(3));
}
}
}
ACTUALIZACIÓN: Así que salí de mi edificio y funcionó ... tengo que salir más a menudo.
Sin embargo, cuando desactivo el gps, pensé que geoLocation encontraría mi ubicación usando la conexión wifi, pero falla (estoy configurando enableHighAccuracy: false). ¿Porqué es eso?
ACTUALIZACIÓN: ¿ Nadie? De acuerdo, permítanme reformular mi pregunta: ¿Supone que navigator.geolocation.watchPosition funciona tanto con señal GPS como con señales wifi / g3? ¿Cómo puedo detectar la ubicación del usuario usando solo la conexión a Internet? Actualmente, mi código solo funciona con GPS, y cuando esa opción se desactiva o la señal se bloquea, la geolocalización no funciona ... ¡AYUDA POR FAVOR!
Puede sonar estúpido, pero, ¿activó la opción "Usar redes"?
Vaya a Configuración -> Ubicación y seguridad -> Usar redes; y activo. Pasé toda la tarde mirando el problema y fue eso.
He logrado resolverlo ... Sin embargo, no tengo idea de qué fue lo que realmente lo resolvió. Todo lo que hice fue cambiar una de las estructuras de mi modelo. ¿Alguien puede ver la conexión a la geolocalización?
Sé que tal vez sea demasiado tarde, ¡pero hoy tuve problemas con el mismo problema! ¡La solución resultó ser muy simple!
SOLUCIÓN: reinicia el dispositivo.
Eso es todo.
El problema es que nunca se sabe cuando el usuario obtendrá este tipo de error, por lo que si su aplicación depende en gran medida de la geolocalización, le recomiendo que establezca un tiempo de espera en las opciones de ubicación navigator.geolocation.getCurrentPosition(geoSuccess, geoError, {timeout: 15000})
y alerta al usuario sobre el problema y la posible solución.
PD Tenga en cuenta que la geolocalización puede agotar el tiempo de espera, por ejemplo, si los datos móviles también están desactivados, por lo que el reinicio no siempre lo solucionará. En iPhone usa datos móviles para obtener su posición, pero en Android, parece que el teléfono no tiene acceso a datos móviles, a menos que 3G esté encendido.
Reinicia tu teléfono o ve a google map y comprueba si gps está funcionando allí. Lo tengo funcionando.
Intente eliminar el plugin de geolocalización del complemento Phonegap de su proyecto. No necesitará realizar ningún cambio en su código JavaScript, ya que su dispositivo recurrirá a la funcionalidad estándar de navegador.geocation HTML5 que tiene la misma firma de método.
Suponiendo que está usando PhoneGap 3.3, solo necesita ejecutar:
cordova plugin rm org.apache.cordova.geolocation
Si está ejecutando un emulador, puede deberse a que el dispositivo no tiene un conjunto de geolocalización. Intenta configurar la ubicación ejecutando lo siguiente, suponiendo que tu emulador de Android esté en el puerto 5554:
telnet localhost 5554
geo fix -0.001 51.5
Reinicié y reinicié. Restablecí mi teléfono a la configuración de fábrica.
Pero nada funcionó.
Hasta que establezca enablHighAccuracy de verdadero a falso.
Y ... Tada ... funciona.
Asi que :
var options;
options = {
maximumAge: 30000,
timeout: 5000,
enableHighAccuracy: false
};
Esto solía funcionar bien usando PhoneGap 2.6.0. Necesitaba hacer este cambio ya que ahora estoy usando Phonegap 3.3, probado en un teléfono Wiko Cink +.
Tuve esto con una aplicación en funcionamiento después de actualizar PhoneGap a la versión 3.6.3 desde 3.5. Después de probar muchas otras sugerencias, la respuesta de Arthur funcionó. 15 segundos me parecieron demasiado largos, así que usé {timeout: 2000}. Supongo que la nueva versión es más lenta ya que mi código funcionó bien antes de la actualización en los mismos dispositivos. Pensé que lo publicaría y lo renunciaría porque todo lo que encontré en Google fue sobre la configuración inicial y sobre todo irrelevante para mi situación.
Solo necesita agregar enableHighAccuracy: true, maximumAge: 60000
y luego reiniciar su dispositivo .
De mi análisis de prueba y error, es más probable: 1. La versión de Android que está usando. En Lollipop y en versiones más bajas, es posible que deba ir a la configuración de ubicación de los teléfonos y habilitar ajustes de alta precisión (usando gps, wlan y redes móviles para obtener ubicación). Tenía que hacer esto en un teléfono Kitkat. 2. Como han mencionado otros, puede intentar cambiar la configuración de getCurrentPosition habilitando / deshabilitando la precisión y agregando un tiempo de espera. 3.Si está usando ngCordova, asegúrese de haberlo instalado correctamente y de que realmente se están llamando a las funciones de ubicación. Usa la consola para verificar
Pruebe esta solución:
window.setInterval(checkPosition, 5000);
function checkPosition() {
function onSuccess(position) {
document.getElementById(''result1'').innerHTML = position.coords.latitude;
document.getElementById(''result2'').innerHTML = position.coords.longitude;
}
// onError Callback receives a PositionError object
//
function onError(error) {
alert(''code: '' + error.code + ''/n'' +
''message: '' + error.message + ''/n'');
}
navigator.geolocation.getCurrentPosition(onSuccess, onError);
}