Använd sensorn för geopositionering genom att instansiera ett Geolocation-objekt och registrera
update
-händelser som skickas. Händelsen
update
är ett Geolocation-händelseobjekt. Händelsen har åtta egenskaper:
-
altitude
– Höjd över havet i meter.
-
heading
– Rörelsens riktning (med avseende på geografisk nord) i heltalsgrader.
-
horizontalAccuracy
– Vågrät precision i meter.
-
latitude
– Latitud i grader.
-
longitude
– Longitud i grader.
-
speed
– Hastigheten i meter per sekund.
-
timestamp
– Det antal millisekunder som vid tiden för händelsen har passerat sedan körningen initierades.
-
verticalAccuracy
– Lodrät precision i meter.
Egenskapen
timestamp
är ett int-objekt. De övriga är Number-objekt.
Det här grundläggande exemplet visar geopositioneringsdata i ett textfält:
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()
}
Om du vill använda exemplet måste du först skapa textfältet
geoTextField
och lägga till det i visningslistan innan koden används.
Du kan justera det önskade tidsintervallet för geopositioneringshändelser genom att anropa metoden
setRequestedUpdateInterval()
för Geolocation-objektet. Den här metoden tar en parameter,
interval
, vilken är det uppdateringsintervall som krävs i millisekunder:
var geo:Geolocation = new Geolocation();
geo.setRequestedUpdateInterval(10000);
Den faktiska tiden mellan uppdateringarna av geopositioneringen kan vara längre eller kortare än det här värdet. Förändringar av uppdateringsintervallet påverkar alla registrerade avlyssnare. Om du inte anropar metoden
setRequestedUpdateInterval()
tar programmet emot uppdateringar beroende på enhetens standardintervall.
Användaren kan förhindra att ett program får åtkomst till data för geopostionering. En användare med iPhone får till exempel en fråga när programmet försöker att hämta data för geopositionering. Användaren kan då neka programmet till att få åtkomst till data för geopositionering. Geolocation-objektet skickar en
status
-händelse när användaren försöker få åtkomst till data för geopositionering som inte är tillgängliga. Geolocation-objektet har också egenskapen
muted
, som är angiven till
true
när sensorn för geopositionering inte är tillgänglig. Geolocation-objektet skickar en
status
-händelse när egenskapen
muted
ändras. I följande kod visas hur du identifierar att data för geopositionering inte är tillgängliga:
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 = "";
}
}
}
Obs!
Första generationens iPhone, de som inte har någon GPS-enhet, skickar
update
-händelser endast sporadiskt. På dessa enheter skickar ett Geolocation-objekt initialt en eller två
update
-händelser. Därefter skickas
update
-händelser när märkbara informationsändringar sker.
Kontrollera stöd för geopositionering
Använd egenskapen
Geolocation.isSupported
för att testa om körningsmiljön kan använda den här funktionen:
if (Geolocation.isSupported)
{
// Set up geolocation event listeners and code.
}
För närvarande stöds geopositionering endast på ActionScript-baserade program för iPhone och i Flash Lite 4. Om värdet för
Geolocation.isSupported
är
true
vid körningen betyder det att det finns stöd för geopositionering.
Vissa iPhone-modeller har inte någon GPS-enhet. Dessa modeller använder andra metoder (till exempel triangulering) för att få geopositioneringsdata. För de här modellerna, samt för alla iPhone-telefoner med inaktiverad GPS, kan ett Geolocation-objekt endast skicka en eller två initiala
update
-händelser.