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.