Aby można było korzystać z czujnika geolokalizacji, należy utworzyć instancję obiektu Geolocation i przeprowadzić rejestrację dla zdarzeń
update
, które obiekt ten wywołuje. Zdarzenie
update
jest obiektem zdarzenia Geolocation. Zdarzenie zawiera osiem właściwości:
-
altitude
— Wysokość w metrach.
-
heading
— Kierunek ruchu (względem północy prawdziwej) w stopniach.
-
horizontalAccuracy
— Dokładność ustalania położenia poziomego w metrach.
-
latitude
— Szerokość geograficzna w stopniach.
-
longitude
— Długość geograficzna w stopniach.
-
speed
— Szybkość w metrach na sekundę.
-
timestamp
— Liczba milisekund w czasie zdarzenia, informująca kiedy nastąpiło zainicjowanie środowiska wykonawczego.
-
verticalAccuracy
— Dokładność ustalania położenia pionowego w metrach.
Właściwość
timestamp
jest obiektem int. Pozostałe właściwości są obiektami typu Number.
Poniżej przedstawiono podstawowy sposób wyświetlania danych geolokalizacji w polu tekstowym:
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()
}
Aby prawidłowo zastosować ten przykład, należy pamiętać o utworzeniu pola tekstowego
geoTextField
i dodaniu go do listy wyświetlanej przed użyciem tego kodu.
Możliwe jest dostosowanie pożądanych przedziałów czasu dla zdarzeń geolokalizacji poprzez wywołanie metody
setRequestedUpdateInterval()
obiektu Geolocation. Ta metoda wymaga jednego parametru,
interval
, który jest żądanym przedziałem czasu między aktualizacjami, wyrażonym w milisekundach.
var geo:Geolocation = new Geolocation();
geo.setRequestedUpdateInterval(10000);
Rzeczywisty odstęp czasu między uaktualnieniami danych geolokalizacji może być większy lub mniejszy od tej wartości. Dowolna zmiana w odstępie między uaktualnieniami wpływa na wszystkie zarejestrowane detektory zdarzeń. Jeżeli metoda
setRequestedUpdateInterval()
nie zostanie wywołana, aplikacja odbiera aktualizacje na podstawie domyślnego przedziału czasu urządzenia.
Użytkownik może zablokować aplikacji dostęp do danych geolokalizacji. Na przykład, w telefonie iPhone wyświetlane jest zapytanie dla użytkownika, gdy aplikacja podejmuje próbę uzyskania dostępu do danych geolokalizacji. W odpowiedzi na to zapytanie użytkownik może nie zezwolić aplikacji na dostęp do danych geolokalizacji. Obiekt Geolocation wywołuje zdarzenie
status
, gdy użytkownik zablokuje dostęp do danych geolokalizacji. Obiekt Geolocation zawiera również właściwość
muted
, która jest ustawiana na wartość
true
, gdy czujnik geolokalizacji jest niedostępny. Obiekt Geolocation wywołuje zdarzenie
status
, gdy właściwość
muted
zostanie zmieniona. Poniższy kod przedstawia sposób wykrywania niedostępności danych geolokalizacji:
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 = "";
}
}
}
Uwaga:
Telefony iPhone pierwszej generacji, które nie są wyposażone w układ GPS, wywołują zdarzenia
update
tylko w nielicznych sytuacjach. W tych urządzeniach obiekt Geolocation początkowo wywołuje jedno lub dwa zdarzenia
update
. Następne zdarzenia
update
są wywoływane tylko po istotnej zmianie informacji.
Sprawdzanie dostępności obsługi funkcji geolokalizacji
Aby sprawdzić, czy środowisko wykonawcze umożliwia korzystanie z tej funkcji, należy użyć właściwości
Geolocation.isSupported
.
if (Geolocation.isSupported)
{
// Set up geolocation event listeners and code.
}
Aktualnie funkcja geolokalizacji jest obsługiwana tylko w aplikacjach opartych na kodzie ActionScript dla telefonu iPhone oraz w programie Flash Lite 4. Jeżeli w czasie wykonywania właściwość
Geolocation.isSupported
ma wartość
true
, oznacza to, że obsługa geolokalizacji jest dostępna.
Niektóre modele telefonu iPhone nie są wyposażone w moduł GPS. W tych modelach wykorzystywane są inne metody (np. triangulacja telefonu komórkowego) do uzyskania danych geolokalizacji. W takich modelach (lub innych telefonach iPhone niewyposażonych w moduł GPS) obiekt Geolocation może wywoływać tylko jedno lub dwa wstępne zdarzenia
update
.