Rilevamento modifiche localizzazione geografica

Per utilizzare il sensore di localizzazione geografica, create l'istanza di un oggetto Geolocation ed effettuate la registrazione per gli eventi update che invia. L'evento update è un oggetto evento Geolocation. L'evento dispone di otto proprietà:

  • altitude : l'altitudine in metri.

  • heading : la direzione di movimento (rispetto al nord geografico) in gradi.

  • horizontalAccuracy : la precisione orizzontale in metri.

  • latitude : la latitudine in gradi.

  • longitude : la longitudine in gradi.

  • speed : la velocità in metri al secondo.

  • timestamp : il numero di millisecondi al momento dell'evento da quando il runtime è stato inizializzato.

  • verticalAccuracy : la precisione verticale in metri.

La proprietà timestamp è un oggetto int. Le altre sono oggetti Number.

L'esempio di base riportato di seguito visualizza i dati di localizzazione geografica in un campo di testo:

var geo:Geolocation; 
if (Geolocation.isSupported) 
{ 
    geo = new Geolocation(); 
    geo.addEventListener(GeolocationEvent.UPDATE, updateHandler); 
} 
else 
{ 
    geoTextField.text = "Geolocation feature not supported"; 
} 
function updateHandler(event:GeolocationEvent):void 
{ 
    geoTextField.text = "latitude: " + event.latitude.toString() + "\n" 
            + "longitude: " + event.longitude.toString() + "\n" 
            + "altitude: " + event.altitude.toString() 
            + "speed: " + event.speed.toString() 
            + "heading: " + event.heading.toString() 
            + "horizontal accuracy: " + event.horizontalAccuracy.toString() 
            + "vertical accuracy: " + event.verticalAccuracy.toString() 
}

Per utilizzare questo esempio, accertatevi di creare il campo di testo geoTextField e di aggiungerlo all'elenco di visualizzazione prima di utilizzare questo codice.

Potete regolare l'intervallo di tempo desiderato per gli eventi di localizzazione geografica chiamando il metodo setRequestedUpdateInterval() dell'oggetto Geolocation. Questo metodo accetta un solo parametro, interval , che corrisponde all'intervallo di aggiornamento richiesto in millisecondi:

var geo:Geolocation = new Geolocation(); 
geo.setRequestedUpdateInterval(10000);

L'intervallo effettivo tra gli aggiornamenti della localizzazione geografica può essere maggiore o minore di questo valore. Qualsiasi modifica dell'intervallo di aggiornamento ha effetto su tutti i listener registrati. Se non chiamate il metodo setRequestedUpdateInterval() , l'applicazione riceve gli aggiornamenti in base all'intervallo predefinito del dispositivo.

L'utente può impedire a un'applicazione di accedere ai dati di localizzazione geografica. Ad esempio, l'iPhone visualizza una richiesta all'utente quando un'applicazione tenta di ottenere dati di localizzazione geografica. In risposta a questa richiesta, l'utente può negare all'applicazione l'accesso ai dati di localizzazione geografica. L'oggetto Geolocation invia un evento status quando l'utente accede a dati di localizzazione geografica non disponibili. Inoltre, l'oggetto Geolocation dispone di una proprietà muted , che viene impostata su true quando il sensore di localizzazione geografica non è disponibile. L'oggetto Geolocation invia un evento status quando la proprietà muted cambia. Il codice seguente mostra come rilevare quando i dati di localizzazione geografica non sono disponibili:

package 
{ 
    import flash.display.Sprite; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.GeolocationEvent; 
    import flash.events.MouseEvent; 
    import flash.events.StatusEvent; 
    import flash.sensors.Geolocation; 
    import flash.text.TextField; 
    import flash.text.TextFormat; 
 
    public class GeolocationTest extends Sprite 
    { 
         
        private var geo:Geolocation; 
        private var log:TextField; 
         
        public function GeolocationTest() 
        {             
            super(); 
            stage.align = StageAlign.TOP_LEFT; 
            stage.scaleMode = StageScaleMode.NO_SCALE; 
            setUpTextField(); 
             
            if (Geolocation.isSupported) 
            { 
                geo = new Geolocation(); 
                if (!geo.muted) 
                { 
                    geo.addEventListener(GeolocationEvent.UPDATE, geoUpdateHandler); 
                } 
                geo.addEventListener(StatusEvent.STATUS, geoStatusHandler); 
            } 
            else 
            { 
                log.text = "Geolocation not supported"; 
            } 
        } 
         
        public function geoUpdateHandler(event:GeolocationEvent):void 
        { 
            log.text = "latitude : " + event.latitude.toString() + "\n"; 
            log.appendText("longitude : " + event.longitude.toString() + "\n"); 
        } 
         
        public function geoStatusHandler(event:StatusEvent):void 
        { 
            if (geo.muted) 
                geo.removeEventListener(GeolocationEvent.UPDATE, geoUpdateHandler); 
            else 
                geo.addEventListener(GeolocationEvent.UPDATE, geoStatusHandler); 
        } 
         
        private function setUpTextField():void 
        { 
            log = new TextField(); 
            var format:TextFormat = new TextFormat("_sans", 24); 
            log.defaultTextFormat = format; 
            log.border = true; 
            log.wordWrap = true; 
            log.multiline = true; 
            log.x = 10; 
            log.y = 10; 
            log.height = stage.stageHeight - 20; 
            log.width = stage.stageWidth - 20; 
            log.addEventListener(MouseEvent.CLICK, clearLog); 
            addChild(log); 
        } 
        private function clearLog(event:MouseEvent):void 
        { 
            log.text = ""; 
        } 
    } 
}
Nota: gli iPhone di prima generazione, che non includono un'unità GPS, inviano eventi update solo raramente. In questi dispositivi, un oggetto Geolocation inizialmente invia uno o due eventi update , quindi invia altri eventi update quando le informazioni cambiano in modo significativo.

Verifica del supporto localizzazione geografica

Utilizzate la proprietà Geolocation.isSupported per verificare se l'ambiente di runtime è in grado di utilizzare questa funzione:

if (Geolocation.isSupported) 
{ 
    // Set up geolocation event listeners and code. 
}

Attualmente, la localizzazione geografica è supportata solo in applicazioni basate su ActionScript per l'iPhone e in Flash Lite 4. Se Geolocation.isSupported è impostato su true in fase di runtime, il supporto localizzazione geografica è disponibile.

Alcuni modelli di iPhone non dispongono di un'unità GPS e utilizzano altri modalità (ad esempio, la triangolazione dei cellulari) per ottenere i dati di localizzazione geografica. In questi modelli, o su qualsiasi iPhone in cui il GPS è disattivato, un oggetto Geolocation può inviare solo uno o due eventi update iniziali.