您的位置:首页 > 其它

获取当前位置(Core Location)

2015-07-10 09:25 337 查看
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>  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: