2

App从长时间挂起模式恢复时GPS信号丢失。
和/或用户进入 GPS 信号较弱的建筑物然后恢复应用程序之后。

蓝点消失,地图以 lat:0 long:0 为中心(位于尼日利亚-非洲附近的海洋中)如果您在该时间点启动另一个 GPS 应用程序,例如 Apple Maps,您会看到蓝色点,即使不是那么准确。

用户可以修复它的唯一方法是完全杀死我的应用程序并重新启动它。

它发生在 iOS 5.x 和 iOS 6.x 上。

在详细介绍之前,我真的很想问:
有人遇到过这个问题吗?
这很烦人,但是我在网络上的任何地方都找不到任何人抱怨这个 - 很奇怪。

我正在使用带有 showUserLocation=YES 的普通 CLLocation,
没有什么神奇的,没有特殊的精度调整或其他什么,只是简单的默认实现。

当应用程序恢复时,我已经尝试重新启动所有可能的组件;

showUserLocation=NO;
showUserLocation=YES;

或者

[locationManager stopUpdatingLocation];
[locationManager startUpdatingLocation];

甚至释放 locationManager 并再次初始化它也无济于事!
(还尝试使用 dispatch_after 延迟重新启动它)

是否有任何编程方式强制在 ios 中重置 GPS 信号或 CLLocation ?
将不胜感激任何相关的讨论!

4

2 回答 2

1

我认为您的默认位置设置为“无”,因此创建了此类问题。

Go to 

Edite Scheme..
    |
    |
  "Run YourProjectName"  / Left Hand Side
       |
       |
  Select "Option" Tab
         |
         |
     Default Location
          |
          |
     Choose any Location such like , "London England"
于 2013-03-23T12:28:37.693 回答
0

当您说您尝试停止/启动CLLocationManager对象时,您是说您在委托中获得的回调为您提供了 0,0 坐标,还是您尝试使用 in 中的location属性直接访问该位置CLLocationManager

我在一个基于位置的应用程序上工作,我可以告诉你的一件事是,你不能指望直接获取CLLocationManager对象的位置。获取位置信息的唯一可靠方法是CLLocationManager通过实现依赖于类的回调

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

我在我的应用程序中处理的方式CLLocationManager(现在我并不是说这对于您的用例来说是最佳或理想的,但它确实允许我们在应用程序启动/恢复时为用户提供可靠的基于位置的体验)

  1. 包装CLLocationManager成一个位置管理类(通常使用单例) - 我认为这可以是一个子类,CLLocationManager但在我的情况下,它只是一个NSObjectCLLocationManager对象为属性的子类
  2. 将最后一个已知的有效位置存储在这个单例中,然后将其写入磁盘(NSUserDefaults 或其他位置 - 需要重新检查您是否被允许存储用户位置,NSUserDefaults但我们已经在我们的应用程序中完成了它并且没有似乎影响审批过程)
  3. 重新实现一种在您的自定义类中获取当前位置的方法 - 基本上检查是否CLLocationManager返回 0,0,如果是,则返回您的缓存位置
  4. 不是绝对必要的,但如果您有多个需要使用该位置的视图/页面,则实现观察者模型效果很好(因为您的单例现在CLLocationManager是委托,您需要有一种方法将此信息传递给您的视图控制器) .

有了以上内容,在我的地图页面上(或在我显示用户位置的任何地方) - 我基本上用缓存的位置更新地图一次(在 中viewDidLoad),然后我允许通过委托回调对地图进行一次更新。一旦收到回调,我就会设置showsUserLocationYES(如果没有调用回调,那么您还没有有效的位置,因此showsUserLocation此时设置不会做任何事情)。

我希望这会有所帮助,如果您有任何其他问题,请随时告诉我!

于 2013-03-23T18:50:46.747 回答