iOS 地理位置未更新

Posted

技术标签:

【中文标题】iOS 地理位置未更新【英文标题】:iOS Geolocation Not Updating 【发布时间】:2015-01-23 02:24:31 【问题描述】:

使用 ios 8 并设置了 NSLocationAlwaysUsageDescription。

这是我的代码:

#import "GeoLocation.h"
#import "AppDelegate.h"

@implementation GeoLocation

- (id)init

    self = [super init];
    if (self)
    
        self.locationManager = [[CLLocationManager alloc] init];
        self.locationManager.delegate = self;
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        self.locationManager.distanceFilter = 5; //in meters
        // Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7.
        if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) 
            [self.locationManager requestWhenInUseAuthorization];
        

        self.numberOfUpdates = 0;
        [self.locationManager startUpdatingLocation];
    
    return self;


// Wait for location callbacks
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

    NSLog(@"Location Updated: %@", [locations lastObject]);


- (float) getLatitude

    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    NSLog(@"getLatitude: %f", self.locationManager.location.coordinate.latitude);
    appDelegate.gMyProfile.latitude = self.locationManager.location.coordinate.latitude;
    return self.locationManager.location.coordinate.latitude;


- (float) getLongitude

    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    NSLog(@"getLongitude: %f", self.locationManager.location.coordinate.longitude);
    appDelegate.gMyProfile.longitude = self.locationManager.location.coordinate.longitude;
    return self.locationManager.location.coordinate.longitude;


- (float) getAltitude

    return self.locationManager.location.altitude;

当用户登录时,我实例化一个 GeoLocation 对象,该对象开启后开始更新位置。

如果我使用 self.locationManager.distanceFilter = 5; 在我家附近走动,didUpdateLocations 不会触发。

但是,如果我摆脱 self.locationManager.distanceFilter = 5; didUpdateLocations 将每秒触发一次。

你们看到的我不是。当用户移动 5 米时,我希望它能够更新。

【问题讨论】:

你有打开wifi吗?尝试将其关闭。 【参考方案1】:

添加距离过滤器很可能会导致 iOS 将水平精度考虑在内。

由于您在内部,因此您不太可能获得水平精度为 5 的位置,这是最佳精度。

如果没有距离过滤器,您可能只是在水平精度中获得相同的位置或距离内的另一个位置。

一般情况下,当您在室外可以清楚地看到您上方的卫星而不是靠近可以反射和遮挡信号的高楼时,您只能获得 5 米的精度。

【讨论】:

以上是关于iOS 地理位置未更新的主要内容,如果未能解决你的问题,请参考以下文章

在后台模式下接收 gps 位置更新 ??iOS 8

应用程序未运行时的iOS后台模式?

即使在暂停时也能获取 iOS 应用的位置更新

在 iOS 上不断跟踪用户位置

iOS 如何定位获取周围地点信息

Android 中的位置未更新