Staying on Track with Location Services--WWDC 2012 session 303
虽然说现在才学习这些,有点为时已晚,但是,对于提升自己能力来说,还是有很大帮助的。所以就这样吧,坚持下去,就是胜利。
以此为开篇。在iOS中追踪用户的位置轨迹。
首先,iOS的定位技术包括以下3种
• Cellular positioning
• Wi-Fi positioning
• Global Navigation Satellite Systems (GNSS)
■ NavStar (GPS) ■ GLONASS
蜂窝定位,Wi-Fi定位,当然还有少不了的全球卫星定位系统(高端吧,一个是GPS,另一个也不知道是什么)!
看看最简单的获取用户当前位置信息的流程
- (void)setupLocation { self.manager=[CLLocationManagernew]; self.manager.delegate=self; self.manager.desiredAccuracy=kCLLocationAccuracyBestForNavigation; } - (void)startLocation { [self.managerstartUpdatingLocation]; } - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation*)oldLocation { self.mapView.userPosition=newLocation; }
- 另外一个功能:
经纬度与地址之间可以相互编码,例如:
800 Howard St. San Francisco, CA <-----> 37.78338, -122.403354
- 监测设备是否进入某个特定区域
CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(37.332426, -122.030404); CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:coord radius:100.0 identifier:@”Apple Inc.”];
再调用startMonitoringForRegion:(CLRegion *)region,并设置好CLLocationManagerDelegate即可
在locationManager:didEnterRegion:和locationManager:didExitRegion:这两个回调方法即可实现监测功能。
iOS6开始,定位需要用户授权这是大家都很熟悉了,就不再详述了。
- 一些苹果给的建议(原话是:Tips, Tricks, and Myths)
1.使用地图可以更快地加载位置(获取用户位置)
2.关闭Wi-Fi以提高精准度
如何让程序在后台运行?这个可能可以展开一个篇幅来讲
<key>UIBackgroundModes</key> <array> <string>location</string> </array> <key>Required background modes</key> <array> <string>Appregistersforlocationupdates</string> </array>
最后总结是,尽可能为用户省电,当获取完一次用户位置,判断精准度,然后就该停止update用户的位置,下次需要新位置的时候再startupdating。