10
votes

La géolocalisation JavaScript sur Android ne fonctionne pas

Je développe un site Web qui s'appuie sur la traction des données de géolocalisation d'un utilisateur mobile. Je le fais la manière typique via: xxx

Ceci échoue toujours avec [ObjetError] dans la fonction ErrorOnlocate, même si je change la méthode de géolocalisation.

Ceci est sur un héros HTC avec Android 2.1 en utilisant tout ce que navigateur est intégré. Mon GPS est activé et j'ai demandé au navigateur de permettre aux sites Web de voir mon emplacement. La fonctionnalité "Emplacement" de Google Map Native Application sur le téléphone Picks Up My Emplacement Juste bien

Plus d'autres si je visitant mon site à l'aide de Firefox 3.5 sur mon ordinateur personnel, il trouvera mon emplacement correctement. (Je crois qu'il utilise une combinaison de points de données IP et AP). Quoi qu'il en soit, il utilise le même JavaScript.

Edit: Ceci est HTML / JS dans un navigateur et non une application native. Le message d'erreur exact est également "Le dernier fournisseur d'emplacement a été désactivé"


0 commentaires

4 Réponses :


12
votes

est-ce d'être accédé à partir d'un webview code> ou de l'application de navigateur Android? Si d'un webview code>, vous devrez peut-être activer la géolocalisation via un appel Java. Voir le Référence WebView pour cela.

Sinon, je suis Je ne sais pas précisément ce qui ne va pas avec votre JS, mais voici HTML + JS que je connais fonctionne avec le navigateur Android: P>

<!DOCTYPE html> 
<html> 
<head> 
  <script type="text/javascript"> 
function watchLocation(successCallback, errorCallback) {
  successCallback = successCallback || function(){};
  errorCallback = errorCallback || function(){};

  // Try HTML5-spec geolocation.
  var geolocation = navigator.geolocation;

  if (geolocation) {
    // We have a real geolocation service.
    try {
      function handleSuccess(position) {
        successCallback(position.coords);
      }

      geolocation.watchPosition(handleSuccess, errorCallback, {
        enableHighAccuracy: true,
        maximumAge: 5000 // 5 sec.
      });
    } catch (err) {
      errorCallback();
    }
  } else {
    errorCallback();
  }
}

function init() {
  watchLocation(function(coords) {
    document.getElementById('test').innerHTML = 'coords: ' + coords.latitude + ',' + coords.longitude;
  }, function() {
    document.getElementById('test').innerHTML = 'error';
  });
}
  </script> 
</head> 

<body onload="init()"> 
  <div id="test">Loading...</div> 
</body> 
</html>


3 commentaires

Hmm, merci pour la réponse. C'est une approche différente mais le comportement est bizarre. Il faut plus de 2 minutes pour trouver un emplacement et une fois que cela affiche uniquement les coordonnées environ 5 secondes, puis affiche enfin "l'erreur".


J'ai ajouté les options à mon code ci-dessus et cela fonctionne exactement de la même manière, prend plus de 2 minutes pour obtenir un emplacement, mais ce n'est pas une erreur d'erreur au moins. La clé est le drapeau AcableHighCuceCuracy, sans que le drapeau est erreurs à chaque fois. Savez-vous un forum plus spécialisé pour prendre cette enquête, car à 2 minutes pour obtenir un verrou, ce projet est mort dans l'eau.


Impair, je reçois une réponse presque immédiatement sur mon Nexus. Peut-être que c'est un problème avec l'appareil et non le code? J'essaierais cela avec un émulateur et je l'envoie des données de localisation simulées via DDMS.



0
votes

J'ai testé la fonctionnalité de géolocalisation HTML5 avec les deux téléphones suivants:

  • HTC Wildfire Li>
  • HTC Galaxy Li> ul>

    Les deux exécutaient le système d'exploitation Android 2.1 Update1 et ils ont toutes deux échec à la géolocalisation à l'aide du navigateur Google intégré et des sites de démonstration tels que: P>

    • http://maxheapsize.com/static/html5geolocouplacocalisationdemo.html Li>
    • http://html5demos.com/geo li> ul>

      Cependant, j'ai développé ma propre application (en utilisant une combinaison du code déjà présenté ci-dessus) qui fonctionne avec succès sur: p>

      • HTC Wildfire Li>
      • Android 2.1 Update1 Emulateur LI>
      • n'a pas encore eu de HTC Galaxy pour tester LI> ul>

        et le code que j'utilise est: p>

        1. JavaScript Lib: xxx pré> code> p>

          Fonction Watchlocation (SUCCESSCALLACKBACK, ERRORCALLACK) { SUCCESSCALLBACK = SUCCESSCALLBACK || fonction(){}; ErrorCallback = ErrorCallback || fonction(){}; p>

          if (is_browser_gps_capable()) {
              $('geo_location').innerHTML = 'Locating device...';
              watchLocation(function(coords) {
                    var latlng = new google.maps.LatLng(coords.latitude, coords.longitude);
                    var myOptions = {
                      zoom: 16,
                      center: latlng,
                      mapTypeId: google.maps.MapTypeId.ROADMAP
                    };
                    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
                    var marker = new google.maps.Marker({
                        position: latlng, 
                        map: map,
                    });
                 $('geo_location').innerHTML = coords.latitude + ',' + coords.longitude;
               }, function() {
                 $('geo_location').innerHTML = 'Not supported';
              });
          } else {
              $('geo_location').innerHTML = 'Not supported';
          }
          
        2. code réel dans mon fichier HTML: xxx pré> code> p> li> OL>

          Désolé, ce code source ne veut que le formater correctement, le message M me et je vous enverrai directement le code si vous le souhaitez. P> P>


0 commentaires

1
votes

Cela ne fonctionnait pas sur mon Android 2.4, le problème a été résolu en permettant à l'emplacement des réseaux sans fil, outre le GPS (ne fonctionnait pas avec seulement GPS)

Paramètres -> Emplacement et confidentialité -> Activer les réseaux sans fil.


0 commentaires

0
votes

J'avais ce problème et je pense que c'était parce que le pouvoir sur l'appareil était faible. L'a chargé et le problème est parti.


0 commentaires