大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > IOS技巧 > iOS定位服务编程详解

iOS定位服务编程详解(1)

关键词:iOS定位  阅读(1406) 赞(16)

[摘要]本文是对iOS定位服务编程详解的讲解,对学习IOS苹果软件开发有所帮助,与大家分享。

现在的移动设备很多都提供定位服务,使用iOS系统的iPhone、iPodTouch和iPad都可以提供位置服务,iOS设备能提供3种不同途径进行定位:Wifi,蜂窝式移动电话基站,GPS卫星

iOS 不像Android系统在定位服务编程时,可以指定采用哪种途径进行定位。iOS的API把底层这些细节屏蔽掉了,开发人员和用户并不知道现在设备是采用 哪种方式进行定位的,iOS系统会根据设备的情况和周围的环境,采用一套最佳的解决方案。这个方案是这样的,如果能够接收GPS信息,那么设备优先采用 GPS定位,否则采用Wifi或蜂窝基站定位,在Wifi和蜂窝基站之间优先使用Wifi,如果无法连接Wifi才使用蜂窝基站定位。

总体来说GPS定位优点是准确、覆盖面广阔,缺点是不能被遮挡(例如:在建筑物里面收不到GPS卫星信号)、GPS开启后比较费电。蜂窝基站不仅误差比较大,而且会耗费用户流量费。而Wifi定位是最经济实惠的。

定位服务编程

定 位服务在iOS6之后API没有太大的变化,主要使用CoreLocation框架,定位时候主要使用CLLocationManager、 CLLocationManagerDelegate和CLLocation。CLLocationManager是定位服务管理类它能够给我们提供获得 设备的位置信息和高度信息,也可以监控设备进入或离开某个区域,它还可以帮助获得设备的运行方向等。CLLocationManagerDelegate 是CLLocationManager类委托协议。CLLocation类是封装了位置和高度信息。

在定位服务的应用中,第一次请求获得位置信息时候,系统会提示用户是否允许开启定位服务。用户所在的位置是比较私密的信息,应用获取这些信息用户是有知情权和否定权的。如果应用在用户不知情的情况下,而获得用户的位置信息,这在某些国家是违法的行为。

1

选择“不允许”,定位服务就无法获得位置信息了,如果想改变这些设置可以在系统设置应用中开启或关闭。

2

我们可以关闭所有的定位服务,只需要把最上面的“定位服务”开关控件关闭就可以了。下面的具体应用也可以关闭和开启。

下面我们通过一个案例介绍一下使用定位服务编程,在应用启动时候启动,进入画面时候会获得位置信息,并显示在对应的文本框中,如果设备位置发送变化,也会重新会的位置信息,并更新对应的文本框。

3

首先要实现定位服务的案例,需要为工程引入CoreLocation框架,添加具体步骤是选择工程中的TARGETS→WhereAmI→BuildPhases→LinkBinaryWithLibraries,选择右下角的“+”按钮,打开框架和库选择对话框

4

再添加对话框中选择CoreLocation.framework,点击Add按钮后添加完成。UI设计部分我们不再介绍。我们直接看看实现代码,其中主要代码是视图控制器ViewController中编写的,其中ViewController.h代码如下:

Cpp代码
  1. #import<UIKit/UIKit.h>
  2. #import<CoreLocation/CoreLocation.h>
  3. #import<CoreLocation/CLLocationManagerDelegate.h>
  4. @interfaceViewController:UIViewController<CLLocationManagerDelegate>
  5. //经度
  6. @property(weak,nonatomic)IBOutletUITextField*txtLng;
  7. //纬度
  8. @property(weak,nonatomic)IBOutletUITextField*txtLat;
  9. //高度
  10. @property(weak,nonatomic)IBOutletUITextField*txtAlt;
  11. @property(nonatomic,strong)CLLocationManager*locationManager;
  12. @end

在h文件中首先需要引入<CoreLocation/CoreLocation.h> 和<CoreLocation/CLLocationManagerDelegate.h>头文件。然后在定义ViewController 时需要声明实现CLLocationManagerDelegate协议。我们还定义了 CLLocationManager*locationManager属性。

ViewController.m的viewDidLoad代码如下:

Cpp代码
  1. -(void)viewDidLoad
  2. {
  3. [superviewDidLoad];
  4. //定位服务管理对象初始化
  5. _locationManager=[[CLLocationManageralloc]init];
  6. _locationManager.delegate=self;
  7. _locationManager.desiredAccuracy=kCLLocationAccuracyBest;①
  8. _locationManager.distanceFilter=1000.0f;②
  9. }

在viewDidLoad方法中,主要对CLLocationManager的成员变量 _locationManager进行初始化。首先使用[[CLLocationManageralloc]init]语句实例化 CLLocationManager对象。然后_locationManager.delegate=self语句设置定位服务委托为self。第① 行代码设置desiredAccuracy属性,它是一个非常重要的属性,它的取值有6个常 量:kCLLocationAccuracyNearestTenMeters。精度10 米;kCLLocationAccuracyHundredMeters。精度100 米;kCLLocationAccuracyKilometer。精度1000 米;kCLLocationAccuracyThreeKilometers。精度3000米;kCLLocationAccuracyBest。设备 使用电池供电时候,最高的精度;kCLLocationAccuracyBestForNavigation。导航情况下最高精度,一般要有外接电源时才 能使用;

精度越高请求获得位置信息的时间就越短,这就意味着设备越耗电。因此一个应用应该选择适合它的精度,如果你的应用是一个车载导航应 用,kCLLocationAccuracyBestForNavigation是比较好的选择,你可以使用汽车上的电瓶为设备供电。如果你的应用为徒步 旅行者提供的导航应用,kCLLocationAccuracyHundredMeters是一个不错的选择。

第②行代码设置distanceFilter属性,它是距离过滤器,它定义了设备移动更新位置信息的最小距离,它的单位是米,本例设置了1000米。

初始化CLLocationManager完成之后,需要使用startUpdatingLocation方法开始定位服务。它是在ViewController.m的viewWillAppear:方法中,代码如下:

«上一页12下一页»


相关评论