【问题标题】:iOS 8 Core Location works everytime on WiFi, intermittent on 4GiOS 8 Core Location 每次都在 WiFi 上工作,在 4G 上时断时续
【发布时间】:2023-03-31 01:20:02
【问题描述】:

所以当我使用 WiFi 时它可以工作。但是在 4G 上,它只有在我使用 Wifi 并且已经有了位置的情况下才有效。很多时候没有 WiFi,手机会说它正在使用我的位置,但它没有更新标签,也没有将坐标上传到服务器。代码如下:

- (void)viewDidLoad {
    [super viewDidLoad];

    if (nil == locationManager)
        locationManager = [[CLLocationManager alloc] init];
        locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
        locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    if ([self->locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        [self->locationManager requestWhenInUseAuthorization];
    }

}

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
    CLLocation *newLocation = [locations lastObject];
    NSString *locationLat = [NSString stringWithFormat:@"%.8f", newLocation.coordinate.latitude];
    NSString *locationLong = [NSString stringWithFormat:@"%.8f", newLocation.coordinate.longitude];

    latLongLabel.text = [NSString stringWithFormat:@"Lat: %@ - Long%@",locationLat,locationLong];
    [self postLocation:locationLat secondArg:locationLong];

}
- (void)postLocation: (NSString *)latitudeString secondArg:(NSString *)longitudeString {

//POST COORDINATES TO MY SERVER

}

- (IBAction)startUpdating:(id)sender {

    [locationManager startUpdatingLocation];

}

【问题讨论】:

  • 在进行测试时,您是否会从一个位置移动到另一个位置?如果您离原始位置太近,CLLocationManager 不会向您发送任何位置更新。另外,您是否在模拟器中测试了您的应用程序?除了 4G/Wi-Fi 网络问题之外,您可以使用 Cupertino 周围的预定义电路来检查您的应用是否按预期工作......
  • 我的应用在 SIM 卡上运行,使用像 Apple 这样的静态位置,或者在高速公路上移动。当我使用 Wifi 时,它也适用于我的手机。如果我在启动应用程序并按下 startUpdating() 按钮时使用 WiFi,它会在 100% 的时间在标签上显示我的纬度以及对 postLocation() 的调用。但是,如果我在没有 WiFi 的情况下启动我的应用程序,然后按 startUpdating 按钮,它就不起作用。唯一有效的情况是我最近在使用 WiFi。我没有想法......
  • 我也有同样的问题。你发现问题出在哪里了吗?

标签: ios objective-c ios8 core-location


【解决方案1】:

我的怀疑是,当您使用 4G 时,位置更新仍然可以正常工作(尽管 wifi 三角测量使它们更加精确,但只有 Apple 知道如何,因为实现是私有的),但是发送这些位置可能会出现问题通过 4G 连接快速或可靠地向服务器发送值。 (例如在伦敦,周围有这么多人,速度慢得要命)

您可以通过简单地将位置更新直接记录到视图上的某个 UIlabel 来缩小调试范围,而不是通过服务器基础架构。

作为最后的手段,我会确保 您将CLActivityType 属性设置为CLActivityTypeFitness 并且pausesLocationUpdatesAutomatically 设置为NO

【讨论】:

  • 这是我最初的怀疑,但是标签也没有更新。默认情况下,应用打开时标签上的初始值为“NO LOCATION”。它在 4G 上保持这种状态......我会在 4G 上移动来测试更多
  • 事实证明,在蜂窝数据上,它不会更新,直到我显着移动......在 Wifi 上,如果我静止不动,它无论如何都会更新。按下按钮后立即更新我的应用程序很重要(即使需要几秒钟才能确定位置)。有什么想法可以强制它更新吗?
  • 我遇到了类似的“更新开始流入”的问题......但对于 iBeacon。在您的情况下,您可以定义一个方便的 CLCircularRegion,然后请求您的 locmanager 执行此操作 [self.locationManager requestStateForRegion:region];在您初始化管理器之后。然后处理委托响应 - (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region 试试这个实验,它可能会触发更新流。
猜你喜欢
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 2012-10-28
  • 1970-01-01
相关资源
最近更新 更多