偵測地理位置變更

若要使用地理位置感應器,請初始化 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 事件。