Zur Verwendung des Sensors für die Geolokation instanziieren Sie ein Geolocation-Objekt und registrieren Sie die von diesem Objekt ausgelösten
update
-Ereignisse. Das
update
-Ereignis ist ein Geolocation-Ereignisobjekt. Das Ereignis hat acht Eigenschaften:
-
altitude
– Die Höhe in Metern.
-
heading
– Die Bewegungsrichtung in Grad (relativ zum geografischen Norden).
-
horizontalAccuracy
– Die horizontale Genauigkeit in Metern.
-
latitude
– Der Breitengrad.
-
longitude
– Der Längengrad.
-
speed
– Die Geschwindigkeit in Metern pro Sekunde.
-
timestamp
– Die Anzahl der Millisekunden seit der Initialisierung der Laufzeitumgebung bis zum Auftreten des Ereignisses.
-
verticalAccuracy
– Die vertikale Genauigkeit in Metern.
Bei der
timestamp
-Eigenschaft handelt es sich um ein Objekt mit dem int-Datentyp. Alle anderen Eigenschaften sind Number-Objekte.
Im Folgenden sehen Sie ein einfaches Beispiel zur Anzeige von Geolokationsdaten in einem Textfeld:
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()
}
Bevor Sie diesen Code verwenden können, müssen Sie das
geoTextField
-Textfeld erstellen und der Anzeigeliste hinzufügen.
Sie können das gewünschte Zeitintervall für Geolocation-Ereignisse anpassen, indem Sie die
setRequestedUpdateInterval()
-Methode für das Geolocation-Objekt aufrufen. Diese Methode akzeptiert einen Parameter,
interval
. Dies ist das angeforderte Aktualisierungsintervall in Millisekunden:
var geo:Geolocation = new Geolocation();
geo.setRequestedUpdateInterval(10000);
Die tatsächliche Zeitspanne zwischen Geolokationsaktualisierungen kann größer oder kleiner als dieser Wert sein. Änderungen am Aktualisierungsintervall betreffen alle registrierten Listener. Wenn Sie die
setRequestedUpdateInterval()
-Methode nicht aufrufen, werden die Aktualisierungen in der Anwendung gemäß dem Standardintervall des Geräts durchgeführt.
Der Benutzer kann verhindern, dass eine Anwendung auf Geolokationsdaten zugreift. Beispielsweise wird der Benutzer auf dem iPhone zur Bestätigung aufgefordert, wenn eine Anwendung versucht, Geolokationsdaten abzurufen. Der Benutzer hat dann die Möglichkeit, den Anwendungszugriff auf die Geolokationsdaten zu verweigern. Das Geolocation-Objekt löst ein
status
-Ereignis aus, wenn der Benutzer den Zugriff auf Geolokationsdaten verhindert. Weiterhin verfügt das Geolocation-Objekt über die
muted
-Eigenschaft, die auf
true
gesetzt ist, wenn der Sensor für die Geolokation nicht verfügbar ist. Das Geolocation-Objekt löst ein
status
-Ereignis aus, wenn die
muted
-Eigenschaft sich ändert. Der folgende Code zeigt, wie festgestellt werden kann, dass Geolokationsdaten nicht zur Verfügung stehen:
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 = "";
}
}
}
Hinweis:
iPhones der ersten Generation, die nicht mit einer GPS-Einheit ausgestattet sind, lösen nur gelegentlich
update
-Ereignisse aus. Bei diesen Geräten setzt ein Geolocation-Objekt anfänglich ein oder zwei
update
-Ereignisse ab. Danach werden
update
-Ereignisse abgesetzt, wenn sich Informationen deutlich ändern.
Überprüfen der Unterstützung für die Geolokation
Mithilfe der
Geolocation.isSupported
-Eigenschaft können Sie überprüfen, ob die Laufzeitumgebung dieses Funktionsmerkmal unterstützt:
if (Geolocation.isSupported)
{
// Set up geolocation event listeners and code.
}
Derzeit wird die Geolokation nur in ActionScript-Anwendungen für das iPhone und in Flash Lite 4 unterstützt. Wenn
Geolocation.isSupported
zur Laufzeit
true
lautet, wird die Geolokation unterstützt.
Einige iPhone-Modelle sind nicht mit einer GPS-Einheit ausgestattet. Bei diesen Modellen werden Geolokationsdaten mit anderen Methoden abgerufen (wie beispielsweise Triangulation über das Mobiltelefon). Bei diesen Modellen und bei einem iPhone, auf dem GPS deaktiviert ist, kann ein Geolocation-Objekt nur ein oder zwei anfängliche
update
-Ereignisse auslösen.