iPhone获取当前位置(CoreLocation的一些简单使用)

Core Location框架提供了三种用于追踪设备当前位置的服务,Core Location框架从内置的蜂窝,Wi-Fi或者GPS来获取位置

The significant-change location 

service 提供了低耗电的方法来获取当前位置,当前位置改变时会发出通知

The standard location service 提供了一种可设置的方法来获取当前位置

Region monitoring 监视特定地区的跨越

如果程序必须使用位置服务

在程序的info.plist中添加UIRequiredDeviceCapabilities键,它是一个包含多个字符串的数组,然后添加location-services,gps字符串



1.The Standard Location Service 


[plain]

Listing 1-1  Starting the standard location service   - (void)startStandardUpdates   {       // 创建location manager       if (nil == locationManager)           locationManager = [[CLLocationManager alloc] init];           locationManager.delegate = self; 

[plain]

<span style="font-size:16px;">  // 设置获取位置的精确度,越精确越耗电</span>  

[plain]

<span style="font-size:16px;">    locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;           // 设置距离过滤器,超过次距离就更新一次位置       locationManager.distanceFilter = 500;           [locationManager startUpdatingLocation];   }</span>  

使用location manager之前一般要检查位置服务是否可用,

[plain]

<span style="font-size:16px;">+ (BOOL)locationServicesEnabled</span>  

当位置信息更新时,会给location manager发送消息

2.Significant-Change Location Service

[plain]

<span style="font-size:16px;">- (void)startSignificantChangeUpdates   {       // Create the location manager if this object does not       // already have one.       if (nil == locationManager)           locationManager = [[CLLocationManager alloc] init];           locationManager.delegate = self;       [locationManager startMonitoringSignificantLocationChanges];   }</span>  

可以叫醒在后台的程序


3.Region monitoring Service

使用之前调用CLLocationManager的regionMonitoringAvailable and regionMonitoringEnabled


[plain]

<span style="font-size:16px;">- (BOOL)registerRegionWithCircularOverlay:(MyCircle*)overlay andIdentifier:(NSString*)identifier   {      // Do not create regions if support is unavailable or disabled.      if ( ![CLLocationManager regionMonitoringAvailable] ||           ![CLLocationManager regionMonitoringEnabled] )         return NO;         // If the radius is too large, registration fails automatically,      // so clamp the radius to the max value.      CLLocationDegrees radius = overlay.radius;      if (radius > self.locationManager.maximumRegionMonitoringDistance)         radius = self.locationManager.maximumRegionMonitoringDistance;         // Create the region and start monitoring it.      CLRegion* region = [[CLRegion alloc] initCircularRegionWithCenter:overlay.coordinate                           radius:radius identifier:identifier];      [self.locationManager startMonitoringForRegion:region                       desiredAccuracy:kCLLocationAccuracyHundredMeters];         [region release];      return YES;   }</span>  

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

转载注明出处:https://www.heiqu.com/wygxjg.html