2011-09-30 21 views
6

He creado un script que mostrará la ubicación del usuario utilizando la biblioteca de geolocalización y todo funciona bien. He exportado este script HTML 5 usando PhoneGap y puedo ver que en Configuración-> Servicios de ubicación Mi aplicación está configurada en Activada. Así que asumí que cada vez que ejecuto Mi Aplicación no recibiría el mensaje regular ".... ¿Me gustaría usar su ubicación actual?" con las opciones No permitir o Ok.HTML 5 geolocalización usando phoneGap

No quiero que la gente haga clic en Permitir cada vez que abran Mi aplicación. ¿Hay alguna razón por la cual la aplicación no usa la configuración de Servicios-> Configuración de ubicación? A continuación se muestra la secuencia de comandos simple:

<!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> 

Respuesta

2

OK Miré por todas partes y encontramos que debe esperar a que el dispositivo esté listo a continuación, llame a su jQuery window.ready el interior que permite utilizar las funciones nativas. Pensé que publicaría esto como un novato, fue tuff encontrar la respuesta que estaba buscando.

 // 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); 
      }); 

     }