偵測地理位置變更
若要使用地理位置感應器,請初始化 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 事件。下列程式碼顯示如何偵測地理位置資料無法使用的時機:
var geo:Geolocation;
var latitude:Number;
var longitude:Number;
if (Geolocation.isSupported)
{
geo = new Geolocation();
if (!geo.muted)
{
geo.addEventListener(GeolocationEvent.UPDATE, updateHandler);
geo.addEventListener(StatusEvent.STATUS, geoStatusHandler);
}
}
else
{
trace("not supported");
}
function updateHandler(event:GeolocationEvent):void
{
latitude = event.latitude;
longitude = event.longitude;
}
function geoStatusHandler(event:StatusEvent):void
{
geo.removeEventListener(GeolocationEvent.UPDATE, updateHandler);
}
備註: 第一代 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 事件。