为了账号安全,请及时绑定邮箱和手机立即绑定

如何从IOS中的用户获取当前位置?

/ 猿问

如何从IOS中的用户获取当前位置?

ITMISS 2019-07-22 16:34:38

如何从IOS中的用户获取当前位置?

如何从IOS中的用户获得当前位置?



查看完整描述

3 回答

?
阿晨1998

RedBlueThing的回答对我来说非常有效。这是一些我是如何做到的示例代码。

标头

#import <UIKit/UIKit.h>#import <CoreLocation/CoreLocation.h>@interface yourController : UIViewController <CLLocationManagerDelegate> {
    CLLocationManager *locationManager;}@end

主文件

在init方法中

locationManager = [[CLLocationManager alloc] init];locationManager.delegate = self;locationManager.distanceFilter = kCLDistanceFilterNone;locationManager.desiredAccuracy = kCLLocationAccuracyBest;[locationManager startUpdatingLocation];

回调函数

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    NSLog(@"OldLocation %f %f", oldLocation.coordinate.latitude, oldLocation.coordinate.longitude);
    NSLog(@"NewLocation %f %f", newLocation.coordinate.latitude, newLocation.coordinate.longitude);}

iOS 6

在IOS 6中,不推荐使用委托函数。新的委托是

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

因此,要得到新的职位使用

[locations lastObject]

iOS 8

在IOS 8中,应该在开始更新位置之前显式地询问权限。

locationManager = [[CLLocationManager alloc] init];locationManager.delegate = self;locationManager.distanceFilter = kCLDistanceFilterNone;locationManager.desiredAccuracy = kCLLocationAccuracyBest;if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
    [self.locationManager requestWhenInUseAuthorization];[locationManager startUpdatingLocation];

还必须为NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription应用程序Info.plist的键。否则调用startUpdatingLocation将被忽略,您的委托将不会收到任何回调。

最后,当您完成阅读位置时,请在适当的位置停止更新位置。

[locationManager stopUpdatingLocation];


查看完整回答
反对 回复 2019-07-22
?
PIPIONE

在IOS 6中,

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

不受欢迎。

使用以下代码代替

- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray *)locations {
    CLLocation *location = [locations lastObject];
    NSLog(@"lat%f - lon%f", location.coordinate.latitude, location.coordinate.longitude);}

对于IOS 6~8,上述方法仍然是必要的,但您必须处理授权。

_locationManager = [CLLocationManager new];_locationManager.delegate = self;_locationManager.distanceFilter = kCLDistanceFilterNone;_locationManager.desiredAccuracy = kCLLocationAccuracyBest;if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0 &&
    [CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedWhenInUse    //[CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedAlways
   ) {
     // Will open an confirm dialog to get user's approval 
    [_locationManager requestWhenInUseAuthorization]; 
    //[_locationManager requestAlwaysAuthorization];} else {
    [_locationManager startUpdatingLocation]; //Will update location immediately }

这是处理用户授权的委托方法

#pragma mark - CLLocationManagerDelegate- (void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
    switch (status) {
    case kCLAuthorizationStatusNotDetermined: {
        NSLog(@"User still thinking..");
    } break;
    case kCLAuthorizationStatusDenied: {
        NSLog(@"User hates you");
    } break;
    case kCLAuthorizationStatusAuthorizedWhenInUse:
    case kCLAuthorizationStatusAuthorizedAlways: {
        [_locationManager startUpdatingLocation]; //Will update location immediately
    } break;
    default:
        break;
    }}


查看完整回答
反对 回复 2019-07-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信