若要使用地理位置感應器,請初始化 Geolocation 物件,並註冊它所傳送的
update
事件。
update
事件是 Geolocation 事件物件。這個事件有八個屬性:
-
altitude
:高度 (以公尺為單位)。
-
heading
:移動方向 (以正北方作為基準,以角度為單位)。
-
horizontalAccuracy
:水平精確度 (以公尺為單位)
-
latitude
:緯度 (以角度為單位)。
-
longitude
:經度 ( 以角度為單位)。
-
speed
:速度 (每秒公尺數)。
-
timestamp
:從執行階段初始化之後,事件時間的毫秒數。
-
verticalAccuracy
:垂直精確度 (以公尺為單位)。
timestamp
屬性是 int 物件。其他則是 Number 物件。
以下是在文字欄位中顯示地理位置資料的基本範例:
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()
}
若要使用這個範例,請確認建立
geoTextField
文字欄位,並先將它新增至顯示清單,再使用這個程式碼。
您可以呼叫 Geolocation 物件的
setRequestedUpdateInterval()
方法,調整地理位置事件的預定時間間隔。這個方法接受一個參數 (
interval
),而這個參數是要求的更新間隔 (毫秒):
var geo:Geolocation = new Geolocation();
geo.setRequestedUpdateInterval(10000);
地理位置更新之間的實際時間可能大於或小於這個值。在更新間隔中所做的任何變更會影響所有註冊的偵聽程式。 如果您未呼叫
setRequestedUpdateInterval()
方法,則應用程式會根據裝置的預設間隔來接收更新。
使用者可以防止應用程式存取地理位置資料。例如,應用程式嘗試取得地理位置資料時,iPhone 會提示使用者。回應提示時,使用者可以拒絕應用程式存取地理位置資料。使用者不允許存取地理位置資料時,Geolocation 物件會傳送
status
事件。此外,Geolocation 物件具有
muted
屬性。地理位置感應器無法使用時,此屬性會設為
true
。Geolocation 物件會在
muted
屬性變更時傳送
status
事件。下列程式碼顯示如何偵測地理位置資料無法使用的時機:
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 = "";
}
}
}
備註:
第一代 iPhone (不含 GPS 裝置) 只會偶爾傳送
update
事件。在這些裝置上,Geolocation 物件一開始會傳送一個或兩個
update
事件。然後在資訊大幅變更時傳送
update
事件。
檢查地理位置支援
使用
Geolocation.isSupported
屬性測試執行階段環境是否可以使用這個功能:
if (Geolocation.isSupported)
{
// Set up geolocation event listeners and code.
}
目前,只有針對 iPhone 的 ActionScript 型應用程式和 Flash Lite 4 支援地理位置。如果
Geolocation.isSupported
在執行階段是
true
,則支援地理位置。
部分 iPhone 機型沒有 GPS 裝置。這些機型使用其他方法 (例如行動電話三角定位) 取得地理位置資料。在這些機型中,或任何已停用 GPS 的 iPhone 上,Geolocation 物件可能只會傳送一個或兩個初始
update
事件。