Bir coğrafi konum sensörü kullanmak için, Coğrafi konum nesnesini somutlaştırın ve gönderdiği
update
olaylarına kaydolun.
update
olayı bir Coğrafi Konum olayı nesnesidir. Olayın sekiz özelliği bulunur:
-
altitude
—Metre cinsinden yükseklik.
-
heading
—Tamsayı olarak derece cinsinden hareketin yönü (kuzeye göre).
-
horizontalAccuracy
—Metre cinsinden yatay doğruluk.
-
latitude
—Derece cinsinden enlem.
-
longitude
—Derece cinsinden boylam.
-
speed
—Saniye başına metre cinsinden hız.
-
timestamp
—Çalışma zamanının başlatılmasından olay zamanına kadar geçen milisaniye sayısı.
-
verticalAccuracy
—Metre cinsinden dikey doğruluk.
timestamp
özelliği dahili bir nesnedir. Diğerleri ise Sayı nesneleridir.
Aşağıda bir metin alanında coğrafi konum verilerini gösteren basit bir örnek verilmektedir:
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()
}
Bu örneği kullanmak için,
geoTextField
metin alanını oluşturup bu kodu kullanmadan önce ekran listesine eklemeyi unutmayın.
Coğrafi konum nesnesinin
setRequestedUpdateInterval()
yöntemini çağırarak coğrafi konum için istenilen zaman aralığını ayarlayabilirsiniz. Bu yöntemin çağırdığı tek parametre, milisaniye cinsinden talep edilen güncelleme aralığı olan
interval
parametresidir:
var geo:Geolocation = new Geolocation();
geo.setRequestedUpdateInterval(10000);
Coğrafi konum güncellemeleri arasındaki asıl süre bu değerden daha büyük veya daha az olabilir. Güncelleme aralığındaki herhangi bir değişiklik tüm kayıtlı dinleyicileri etkiler.
setRequestedUpdateInterval()
yöntemini çağırmazsanız, uygulama aygıtın varsayılan aralığına göre güncelleme alır.
Kullanıcı, bir uygulamanın coğrafi konum verilerine erişmesini önleyebilir. Örneğin, bir uygulama coğrafi konum verilerini almaya çalıştığında, iPhone kullanıcıyı uyarır. Uyarıya yanıt olarak, uygulamanın coğrafi konum verilerine erişimi kullanıcı tarafından engellenebilir. Coğrafi konum nesnesi, kullanıcı mevcut olmayan coğrafi konum verilerine eriştiği zaman bir
status
olayı gönderir. Ayrıca, Coğrafi Konum nesnesi, coğrafi konum sensörü mevcut olmadığında
true
olarak ayarlanan bir
muted
özelliğine sahiptir.
muted
özelliği değiştiğinde, Coğrafi Konum nesnesi bir
status
olayı gönderir. Aşağıdaki kod, coğrafi konum verilerinin mevcut olmadığı durumların nasıl tespit edileceğini göstermektedir:
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 = "";
}
}
}
Not:
GPS birimi içermeyen birinci nesil iPhone'lar, yalnızca zaman zaman
update
olayları gönderir. Bu cihazlarda ilk olarak bir Geolocation nesnesi bir veya iki
update
olayı dağıtır. Daha sonra bilgi önemli ölçüde değiştiğinde,
update
olaylarını dağıtır.
Coğrafi konum desteğini kontrol etme
Çalışma zamanı ortamının bu özelliği kullanabilme becerisini sınamak için
Geolocation.isSupported
özelliğini kullanın:
if (Geolocation.isSupported)
{
// Set up geolocation event listeners and code.
}
Şu anda, coğrafi konum yalnızca iPhone için ActionScript tabanlı uygulamalarda ve Flash Lite 4’te desteklenmektedir.
Geolocation.isSupported
özelliği çalışma zamanında
true
ise, coğrafi konum desteği mevcuttur.
Bazı iPhone modellerinde bir GPS ünitesi bulunmaz. Bu modeller coğrafi konum bilgilerini almak için başka yöntemler kullanır (cep telefonu triangülasyonu gibi). Bu modellerde veya GPS özelliği devre dışı olan herhangi bir iPhone cihazında, bir Coğrafi Konum nesnesi başlangıçta yalnızca bir veya iki
update
olayı gönderir.