检测 geolocation 更改

要使用 geolocation 传感器,请实例化 Geolocation 对象并注册该对象调度的 update 事件。update 事件是一个 Geolocation 事件对象。A3338此事件包含下列八个属性:

  • altitude — 高度(以米为单位)。

  • heading — 相对于正北的移动方向(以度为单位)。

  • horizontalAccuracy — 水平精度(以米为单位)。

  • latitude — 纬度(以度为单位)。

  • longitude — 经度(以度为单位)。

  • speed — 速度(以米/秒为单位)。

  • timestamp — 自初始化运行时后事件的毫秒数。

  • verticalAccuracy — 垂直精度(以米为单位)。

timestamp 属性是一个 int 对象。其他属性是 Number 对象。

以下是在文本字段中显示 geolocation 数据的一个基本示例:

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() 方法调整 geolocation 事件的所需时间间隔。此方法使用一个参数 interval,该参数是请求的更新时间间隔(以毫秒为单位):

var geo:Geolocation = new Geolocation(); 
geo.setRequestedUpdateInterval(10000);

Geolocation 更新之间的实际时间可能大于或小于此值。更新间隔的任何更改都会影响所有注册侦听器。如果您不调用 setRequestedUpdateInterval() 方法,应用程序将根据设备的默认时间间隔接收更新。

用户可以阻止应用程序访问 geolocation 数据。例如,应用程序尝试获取 geolocation 数据时,iPhone 会提示用户。为响应该提示,用户可以拒绝应用程序访问 geolocation 数据。当用户不能访问 geolocation 数据时,Geolocation 对象将调度 status 事件。另外,Geolocation 对象还包含 muted 属性,当 geolocation 传感器不可用时,该属性设置为 true。当 muted 属性发生更改时,Geolocation 对象将调度 status 事件。以下代码显示如何检测 geolocation 数据在哪些情况下不可用:

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); 
}
注: 不包括 GPS 单位的第一代 iPhone 仅偶尔调度 update 事件。在这些设备上,Geolocation 对象最初调度一个或两个 update 事件。随后,当信息明显更改时将调度 update 事件。

检查 geolocation 支持

使用 Geolocation.isSupported 属性测试运行时环境是否能够使用此功能:

if (Geolocation.isSupported) 
{ 
    // Set up geolocation event listeners and code. 
}

目前,仅 iPhone 的基于 ActionScript 的应用程序和 Flash Lite 4 支持此 geolocation。如果 Geolocation.isSupported 在运行时为 true,则存在 geolocation 支持。

某些 iPhone 模型没有 GPS 单位。这些模型使用其他方法(如移动电话三定位)获取 geolocation 数据。对于这些模型或任何已禁用 GPS 的 iPhone,Geolocation 对象可能只调度一个或两个初始 update 事件。