区域监控(地理围栏)消耗电池(iOS)

区域监控(地理围栏)消耗电池(iOS),ios,objective-c,iphone,cocoa-touch,cllocationmanager,Ios,Objective C,Iphone,Cocoa Touch,Cllocationmanager,我已经在我的应用程序中实现了CLLocationManager的区域监控功能,它可以工作,但会耗尽我的电池: - - 应该是这样吗 我的代码: 监视器位置ViewController.m(请滚动查看完整代码): 谢谢大家! 您只想监视区域,而不是在后台不断更新它们的位置 试试这个: self.locationManager.desiredAccuracy=kCLLocationAccuracyBest; 是否确实需要将distanceFilter设置为KCLDistanceFilterOne

我已经在我的应用程序中实现了
CLLocationManager
的区域监控功能,它可以工作,但会耗尽我的电池:

-

-

应该是这样吗

我的代码:

监视器位置ViewController.m(请滚动查看完整代码):


谢谢大家!

您只想监视区域,而不是在后台不断更新它们的位置

试试这个:

self.locationManager.desiredAccuracy=kCLLocationAccuracyBest;
是否确实需要将distanceFilter设置为
KCLDistanceFilterOne
?这将导致使用更多的电池电量。你可能想尝试将其设置为10米、20米、50米甚至100米左右

此外,为了不经常更新位置,请不要:

[self.locationManager startUpdatingLocation];
尝试使用:

[self.locationManager startMonitoringSignificantLocationChanges];
所有这些都有助于减少电池的使用。当您将“精度”和“距离”过滤器设置为可能的最高设置时,电池将耗尽

编辑: 由于应用程序的用途,无论你做什么,都会消耗大量电池。我以前解决过类似问题的方法是使用NSTimer创建算法或公式,NSTimer每x分钟触发一次,以更新用户的位置。(但仅当区域移动x米时才更新区域)

  • 在启动NSTimer之间停止位置更新,这样您就不会经常更新位置
  • 当计时器启动时,恢复位置更新,抓取大约10个位置(这样您就可以得到一个准确的位置),然后关闭位置更新,直到下一次计时器启动

添加初始化CLLocationManager的代码。@MSU\U Bulldog更新了帖子,请看一看我会发布一个答案,我看到你的问题。我确实需要更新后台区域,因为我有20多个区域,我需要根据用户的位置启动/停止监视器这些区域有多近?根据我的经验,显著的位置变化通常会更新用户在100-200米范围内的位置。如果你想每10英尺更新一次他们的位置,并重置被监控的区域,你可以期望电池在数小时内耗尽。电池可以彼此非常接近(我有一个商店列表,我希望用户更新,甚至可能是同一条街上的10家商店),如何处理?请参阅我的答案的编辑,了解如何以如此高的精度处理如此频繁的位置更新
[self.locationManager startUpdatingLocation];
[self.locationManager startMonitoringSignificantLocationChanges];