×
Namespaces

Variants
Actions

在WP7里使用Location Service APIs

From Nokia Developer Wiki
Jump to: navigation, search
SignpostIcon XAML 40.png
SignpostIcon WP7 70px.png
Article Metadata

兼容于
文章
翻译:
WS_YiLunLuo
最后由 hamishwillee 在 22 Jul 2013 编辑


这篇文章讲述了怎样在WP7里使用location service APIs

简介

以下代码片段展示了如何一次性地初始化Location Service、处理服务状态的变化并在WP7 手机里获取位置信息。使用Wp7 Location Service APIs,需要在应用程序里引用 System.Device.dll

public partial class MainPage : PhoneApplicationPage
{
GeoCoordinateWatcher watcher;
//点击“Start Location”按钮添加事件处理程序。
private void startLocationButton_Click(object sender, RoutedEventArgs e)
{
//在前面,watcher变量已经被声明为GeoCoordinateWatcher类型。
if (watcher == null)
{
watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High); //使用高精度
watcher.MovementThreshold = 20; // MovementThreshold来忽略微小的变化
watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
}
watcher.Start();
} // button click事件结束.
 
 
// GeoCoordinateWatcher.StatusChanged事件处理程序.
// StatusChanged事件句柄的实现.
//一旦Location Service的状态改变,这个事件就会被触发。
// GeoPositionStatus枚举在GeoPositionStatusChangedEventArgs对象里被传递,告诉你//service当前的状态。
 
void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
{
switch (e.Status)
{
case GeoPositionStatus.Disabled:
// Location Service被禁用或不被支持。
//检测用户是否禁用Location Service。
if (watcher.Permission == GeoPositionPermission.Denied)
{
//用户禁用了Location Service。
statusTextBlock.Text = "you have this application access to location.";
}
else
{
statusTextBlock.Text = "location is not functioning on this device";
}
break;
 
case GeoPositionStatus.Initializing:
// Location Service正在初始化。
//禁用Start Location按钮。
startLocationButton.IsEnabled = false;
break;
case GeoPositionStatus.NoData:
// Location Service正在工作,但是它不能获取位置信息。
//提示用户并启用Stop Location按钮。
statusTextBlock.Text = "location data is not available.";
stopLocationButton.IsEnabled = true;
break;
 
case GeoPositionStatus.Ready:
// Location Service正在使用并且正在接收位置信息。
//显示当前位置并启用Stop Location按钮。
statusTextBlock.Text = "location data is available.";
stopLocationButton.IsEnabled = true;
break;
}
}
 
//当Location Service就绪并开始接收数据,将触发PositionChanged事件,如果你实现了一个事件处理程序,它将被调用。
//在事件处理程序里访问GeoPositionChangedEventArgs(Of T)对象的Position属性。
// Position属性是一个由Timestamp 和一个包含提供位置信息的GeoCoordinate对象组成的GeoPosition对象。这个示例访问latitude 和 longitude的值。
 
void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
latitudeTextBlock.Text = e.Position.Location.Latitude.ToString("0.000");
longitudeTextBlock.Text = e.Position.Location.Longitude.ToString("0.000");
}
 
//“Stop Location”按钮的事件处理程序。
private void stopLocationButton_Click(object sender, RoutedEventArgs e)
{
watcher.Stop();
}
This page was last modified on 22 July 2013, at 08:20.
62 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×