【问题标题】:When should I stop updating location manager?我应该何时停止更新位置管理器?
【发布时间】:2013-06-05 03:00:43
【问题描述】:

我有一个应用程序可以拨打电话以获取用户的位置:

-(void)getLocation{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [locationManager startUpdatingLocation];

}
//SET USER LOCATION
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    self.userLocation = [locations lastObject];
    NSLog(@"location in IntroVC %f, %f", self.userLocation.coordinate.latitude, self.userLocation.coordinate.longitude);
}

我的问题是,由于 NSLog 不断地吐出一个新的位置,我应该什么时候停止调用该位置?好吧,我想这真的取决于我的应用程序的功能,但这不会导致电池耗尽吗?如果是这样,我真的应该研究停止更新的最佳方法。

【问题讨论】:

    标签: ios objective-c mapkit cllocationmanager


    【解决方案1】:

    位置管理器的距离过滤器设置为 kCLDistanceFilterNone。这会导致 didUpdateLocations 方法被无限调用。

    locationManager.distanceFilter = kCLDistanceFilterNone;
    

    将此行改为

    locationManager.distanceFilter = 10;
    

    然后再试一次。根据需要更改值。

    所以现在 didUpdateLocation 不会被无限次调用。 :)

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      根据您应用的性质,您可能希望在进入后台或屏幕锁定时关闭定位服务。这些通知挂钩通常在您的应用委托文件 (.m) 中提供。是的,您是对的,定位服务会显着消耗电池电量,强烈建议使用定位服务的 iOS 应用谨慎使用它。

      Apple 似乎已经考虑到这一点,并提供了一个 API,仅当用户“显着”移动 Apple the significant change location service 时才会通知应用程序。 “显着移动”的定义在各个方面有所不同,具体取决于 WiFi 可用性、蜂窝塔可用性、GPS 可用性等。幸运的是,所有这些都在这个 API 中被混淆了。

      【讨论】:

        【解决方案3】:

        我在更新didupdateloactions 中的位置后调用此方法,因此当我的应用进入后台时,它会从顶部状态栏中删除位置图标。

        【讨论】:

          猜你喜欢
          • 2017-05-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-26
          • 2014-09-06
          • 2013-07-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多