2011-09-30 4 views
6

Ho creato uno script che mostra la posizione dell'utente utilizzando la libreria di geolocalizzazione e tutto funziona correttamente. Ho esportato questo script HTML 5 usando PhoneGap e posso vederlo in Impostazioni-> Servizi di localizzazione. La mia app è impostata su On. Quindi ho pensato che ogni volta che eseguivo la mia app non avrei ricevuto il prompt regolare ".... vorresti usare la tua posizione attuale?" con le opzioni Non consentire o Ok.Geolocalizzazione HTML 5 tramite telefonoGap

Non voglio che le persone facciano clic su Consenti ogni volta che aprono La mia app. C'è un motivo per cui l'app non utilizza l'impostazione da Servizi-> Impostazioni posizione? Di seguito è riportato lo script semplice:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta name="apple-mobile-web-app-capable" content="yes" /> 

     <meta name="apple-mobile-web-app-status-bar-style" content="black" /> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> 

     <link rel="apple-touch-icon-precomposed" href="custom_icon_precomposed.png"/> 
     <link rel="apple-touch-startup-image" href="apple-touch-icon-precomposed.png"> 
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script> 
      <script> 

       jQuery(window).ready(function(){ 
            jQuery("#btnInit").click(initiate_watchlocation); 
            jQuery("#btnStop").click(stop_watchlocation); 
            }); 

       var watchProcess = null; 

       function initiate_watchlocation() { 
        if (watchProcess == null) { 
         watchProcess = navigator.geolocation.watchPosition(handle_geolocation_query, handle_errors, {enableHighAccuracy:true}); 
        } 
       } 

       function stop_watchlocation() { 
        if (watchProcess != null) 
        { 
         navigator.geolocation.clearWatch(watchProcess); 
         watchProcess = null; 
        } 
       } 

       function handle_errors(error) 
       { 
        switch(error.code) 
        { 
         case error.PERMISSION_DENIED: alert("user did not share geolocation data"); 
         break; 

         case error.POSITION_UNAVAILABLE: alert("could not detect current position"); 
         break; 

         case error.TIMEOUT: alert("retrieving position timedout"); 
         break; 

         default: alert("unknown error"); 
         break; 
        } 
       } 

       function handle_geolocation_query(position) { 
        var text = "Latitude: " + position.coords.latitude + "<br/>" + 
        "Longitude: " + position.coords.longitude + "<br/>" + 
        "Accuracy: " + position.coords.accuracy + "m<br/>" + 
        "Time: " + new Date(position.timestamp); 
        jQuery("#info").html(text); 

        var image_url = "http://maps.google.com/maps/api/staticmap?sensor=false&center=" + position.coords.latitude + ',' + position.coords.longitude + 
        "&zoom=14&size=300x400&markers=color:blue|label:S|" + position.coords.latitude + ',' + position.coords.longitude; 

        jQuery("#map").remove(); 
        jQuery(document.body).append( 
               jQuery(document.createElement("img")).attr("src", image_url).attr('id','map') 
               ); 
       } 
       </script> 
      </head> 
    <body> 
     <div> 
      <button id="btnInit" >Monitor my location</button> 

      <button id="btnStop" >Stop monitoring</button> 
     </div> 
     <div id="info"></div> 
    </body> 
</html> 

risposta

2

OK ho guardato tutto e l'ho trovato è necessario attendere che il dispositivo sia pronto quindi chiamare il vostro jquery window.ready all'interno di quella di utilizzare le funzioni native. Pensavo che avrei postato questo come un noob era tufo per trovare la risposta che stavo cercando.

 // Wait for PhoneGap to load 
     // 
     document.addEventListener("deviceready", onDeviceReady, false); 

     // PhoneGap is ready 
     // 
     function onDeviceReady() { 
      jQuery(window).ready(function(){ 
       jQuery("#btnInit").click(initiate_watchlocation); 
       jQuery("#btnStop").click(stop_watchlocation); 
      }); 

     }