Identifiera ändringar i geopositionering

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.