Detectando mudanças de geolocalização

Para utilizar o sensor de geolocalização, instancie um objeto Geolocation e registre para atualizar eventos enviados. O evento update é um objeto de evento Geolocation. O evento possui oito propriedades:

  • altitude —Altitude em metros.

  • heading —A direção do movimento (com respeito ao Norte Verdadeiro) em graus de número inteiro.

  • horizontalAccuracy —A exatidão horizontal em metros.

  • latitude —A latitude em graus.

  • longitude —A longitude em graus.

  • speed —A velocidade em metros por segundo.

  • timestamp —O número de milissegundos no momento do evento a partir do início da execução.

  • verticalAccuracy —A exatidão vertical em metros.

A propriedade timestamp é um objeto int. Os outros são objetos Number.

Este é um exemplo básico que exibe dados de geolocalização em um campo de texto:

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() 
}

Para utilizar este exemplo, certifique-se de criar o campo de texto geoTextField e adicioná-lo para a lista de exibição antes de utilizar este código.

Você pode ajustar o intervalo de tempo para eventos de geolocalização chamando o método setRequestedUpdateInterval() do objeto Geolocation. Este método usa um parâmetro interval , que é o intervalo de atualização solicitado em milisegundos:

var geo:Geolocation = new Geolocation(); 
geo.setRequestedUpdateInterval(10000);

A hora real entre atualizações de geolocalização pode ser maior ou menor do que este valor. Qualquer mudança no intervalo de atualização afeta todos os ouvintes registrados. Se o método setRequestedUpdateInterval() não for chamado, o aplicativo recebe atualizações com base no intervalo padrão do dispositivo.

O usuário pode impedir que um aplicativo acesse dados de geolocalização. Por exemplo, o iPhone consulta o usuário quando um aplicativo tenta obter dados de geolocalização. Em resposta à consulta, o usuário pode negar o acesso do aplicativo aos dados de geolocalização. O objeto Geolocation envia um evento status quando o usuário não fornece acesso aos dados de geolocalização. Além disso objeto Geolocation possui uma propriedade muted que é definida como true quando o sensor de geolocalização não está disponível. O objeto Geolocation envia um evento status quando a propriedade muted muda. O código a seguir mostra como detectar quando os dados de geolocalização não estão disponíveis:

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: iPhones de primeira geração que não possuíam uma unidade GPS, enviam eventos de update ocasionalmente. Nestes dispositivos, o objeto Geolocation inicialmente envia um ou dois eventos update . Em seguida, ele envia eventos update quando as informações são alteradas consideravelmente.

Verificando o suporte a geolocalização

Utilize a propriedade Geolocation.isSupported para testar o ambiente de tempo de execução em relação a habilidade de utilizar este recurso:

if (Geolocation.isSupported) 
{ 
    // Set up geolocation event listeners and code. 
}

Atualmente, a geolocalização é suportada apenas em aplicativos com base no ActionScript para o iPhone e no Flash Lite 4. Caso Geolocation.isSupported for true no tempo de execução, então o suporte a geolocalização está disponível.

Alguns modelos de iPhone não tem uma unidade GPS. Estes modelos utilizam outros meios (assim como triangulação de telefone móvel) para obter dados de geolocalização. Para estes modelos, ou para qualquer modelo de iPhone que não tenham GPS desabilitado, um objeto Geolocation pode enviar apenas um ou dois eventos de atualização iniciais.