ios--定位

Core Location---定位框架 

CLLocationManager这个属性必须写成全局的,不然初始化后就释放了。

授权
NSLocationWhenInUseUsageDescription :当app在前台的时候,才可以获取到定位信息 NSLocationAlwaysUsageDescription :app在前台、后台、挂起、结束进程状态时,都可以获取到定位信息 [locationManager requestWhenInUseAuthorization];//相对应info.plist中的NSLocationWhenInUseUsageDescription键 [locationManager requestAlwaysAuthorization];//相对应info.plist中的NSLocationAlwaysUsageDescription键
根据实际的情况进行控制。

实际授权的代码:
  //以此来判断,是否是ios8
    if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        [locationManager requestWhenInUseAuthorization];
    }kCLAuthorizationStatusNotDetermined:用户还没有被请求获取授权
 
授权框只会弹出一次,如果客户关闭了定位的功能,应该弹出提示框。

 

kCLAuthorizationStatusRestricted:用户在设置里关闭了位置服务
kCLAuthorizationStatusDenied:用户收到获取授权的请求,但点击了NO,或者在设置里关闭了
kCLAuthorizationStatusAuthorized:用户收到获取授权的请求,点击了YES;(此状态在ios8废弃了,ios7以及以下可用)
kCLAuthorizationStatusAuthorizedAlways = kCLAuthorizationStatusAuthorized用户授权app在任何时候获取位置信息
kCLAuthorizationStatusAuthorizedWhenInUse:用户授权app在前台获取位置信息

if ([CLLocationManager authorizationStatus]==kCLAuthorizationStatusDenied){
        NSLog(@"请打开定位服务");
        NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
        [[UIApplication sharedApplication] openURL:settingsURL];
    }

  

[self.locationManager startUpdatingLocation];开始定位服务
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations对应的代理方法
[_locationManager stopUpdatingLocation];
//定位会耗费大量的资源,所以在代理里面关闭定位。

  

现在需求:根据定位获取对应的地名
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{

    //NSLog(@"%@",locations.lastObject);
    CLLocation *location=locations.lastObject;
    [self.geoCoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
       CLPlacemark *placemark=placemarks.lastObject;
        NSLog(@"详细信息:%@",placemark.addressDictionary[@"FormattedAddressLines"]);
    }];
}

  

posted @ 2015-08-28 16:20  cshhs  阅读(215)  评论(0编辑  收藏  举报