iPhone获取当前位置(CoreLocation的一些简单使用)
iPhone获取当前位置(CoreLocation的一些简单使用)
获取用户位置
Core Location框架提供了三种用于追踪设备当前位置的服务,Core Location框架从内置的蜂窝,Wi-Fi或者GPS来获取位置
-
The significant-change location
service 提供了低耗电的方法来获取当前位置,当前位置改变时会发出通知 -
The standard location service 提供了一种可设置的方法来获取当前位置
-
Region monitoring 监视特定地区的跨越
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;
- <span style="font-size:16px;"> // 设置获取位置的精确度,越精确越耗电</span>
- <span style="font-size:16px;"> locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
- // 设置距离过滤器,超过次距离就更新一次位置
- locationManager.distanceFilter = 500;
- [locationManager startUpdatingLocation];
- }</span>
- <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>
|
评论暂时关闭