Windows Phone 8 基于定位的后台应用

后台应用算是 windows phone 8 所特有的一个新功能,说起后台我经常要和地图一起聊起 【关于地图的用法请参考:Windows Phone 8 Nokia地图控件  】今天我着重跟大家聊一下手机定位及基于定位的后台应用,说到定位相信大家已经不再陌生,下载各个平台的只能手机定位 GPS & AGPS 都是一个基本功能很多应用都会用到,但是后台定位应用可能有些同学不他理解,我举一个“栗子”说,好比我现在开车正在借助一款手机导航软件寻找某个餐馆,此时家里的那位老大已经到了目的地要检查一下我到哪了,于是电话响了。。。这时导航软件必然被切换到后台,相信用过手机导航的同学都有过这样的经历,如此场景其他平台也就罢了,在如今windows phone8 是应用支持后台的,那么这个后台能做什么呢?简单的说也就是在此场景下应用可以通过其他形式的提醒方式继续为用户提供导航,例如 ShellToast 当然后台能够使用的API是受限制 但是也足够用了 API的限制请相信参考MSDN:(v=vs.105).aspx

此文是 升级到WP8必需知道的13个特性 系列的一个更新 希望这个系列可以给 Windows Phone 8开发者带来一些开发上的便利。

升级到WP8必需知道的13个特性 系列文章目录地址:

首先我先给大家介绍如使用定位

使用定位功能当然还是要在Manifest文件中声明 location 这里我用的是上一节的Demo 所以也选中了MAP如果你的应用没有使用地图控件可以不选MAP,

Windows Phone 8 基于定位的后台应用

这里介绍一下 Geolocator 这个对象使用它来对地理位置进行获取、初始精度、追踪状态等。

 

private void TrackLocation_Click_1(object sender, EventArgs e) { if (!tracking) { App.Geolocator = new Geolocator(); App.Geolocator.DesiredAccuracy = PositionAccuracy.High; App.Geolocator.MovementThreshold = 2; // The units are meters. App.Geolocator.StatusChanged += geolocator_StatusChanged; App.Geolocator.PositionChanged += geolocator_PositionChanged; tracking = true; //TrackLocationButton.Content = "stop tracking"; } else { App.Geolocator.PositionChanged -= geolocator_PositionChanged; App.Geolocator.StatusChanged -= geolocator_StatusChanged; App.Geolocator = null; tracking = false; //TrackLocationButton.Content = "track location"; StatusTextBlock.Text = "stopped"; } }

 

下面主要使用了StatusChange 和 PositionChange 时间来进行位置获取和路径追踪。

注释中可以明确的看到返回的枚举值都代表着目前是什么样的一个状态,注意这里包括获取到用户在 系统设置中禁用了定位服务(之前有朋友问过我这个问题)

 

void geolocator_StatusChanged(Geolocator sender, StatusChangedEventArgs args) { string status = ""; switch (args.Status) { case PositionStatus.Disabled: // the application does not have the right capability or the location master switch is off status = "location is disabled in phone settings"; break; case PositionStatus.Initializing: // the geolocator started the tracking operation status = "initializing"; break; case PositionStatus.NoData: // the location service was not able to acquire the location status = "no data"; break; case PositionStatus.Ready: // the location service is generating geopositions as specified by the tracking parameters status = "ready"; break; case PositionStatus.NotAvailable: status = "not available"; // not used in WindowsPhone, Windows desktop uses this value to signal that there is no hardware capable to acquire location information break; case PositionStatus.NotInitialized: // the initial state of the geolocator, once the tracking operation is stopped by the user the geolocator moves back to this state break; } Dispatcher.BeginInvoke(() => { StatusTextBlock.Text = status; }); }

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/04cbf0c01b5573489f1a2aeea6842585.html