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.