如何在特定时间段内运行 CLLocationManager

Posted

技术标签:

【中文标题】如何在特定时间段内运行 CLLocationManager【英文标题】:How to run CLLocationManager in a specific period of time 【发布时间】:2016-05-13 14:16:33 【问题描述】:

我已经阅读了this 和许多其他问题。我了解到,无法安排任务在特定时间从后台运行。

我的应用程序使用CLVisit api 将位置信息发送到服务器。但我希望用户能够选择一个时间范围来发送他/她的签到。在特定时间从背景到stopMonitoringVisits()startMonitoringVisits() 有什么不同的方法吗?我的应用是否应该在收到didVisit 呼叫后始终监控并决定发送位置?

同样的问题可以问startMonitoringSignificantLocationChanges()

【问题讨论】:

【参考方案1】:

只要访问监控完全符合您的应用程序的需求,请保持监控始终开启,并在处理 didVisit 回调时决定适当的处理方式(是否应向服务器报告位置)。

您不会以这种方式对电池造成任何明显的压力,因为访问跟踪对电池非常友好,而且无论您的应用程序是否存在,ios 都会默认运行这种监控。

此外,任何试图采用旨在规避供应商推荐甚至 API 设计强制执行的良好做法的“智能”技巧的任何尝试,都不可避免地会导致“不良做法”,在您的情况下,这很可能会带来额外的电池消耗。

始终开启监控的唯一不利影响是状态栏中的实心箭头,许多“受过教育”的 iPhone 用户认为这是高电池使用率的标志。如果这是主要问题,并且如果您的用例涉及相当多的时间跨度(例如,离开办公室和家庭位置),您可以尝试使用静默推送通知在合适的时间激活监控。

【讨论】:

您的意思是获得静默推送回调(处于挂起/后台状态),您可以startLocationUpdates?OK。在那一刻,您是否可以跟踪 180 秒,或者如果您在 plist 中设置了定位服务并且allowsBackgroundLocationUpdates 设置为true,则可以无限期跟踪?

以上是关于如何在特定时间段内运行 CLLocationManager的主要内容,如果未能解决你的问题,请参考以下文章

在特定的时间段内每天以每小时间隔运行本地通知

如何在特定时间段内使用 SoundPool 同时播放声音

如何在特定时间运行我的代码? [复制]

如何在服务器上的特定小时内每分钟运行一次cron作业

在 Ms Access 中的特定时间范围内的特定日期运行宏

SAP系统内如何查询特定时间内某个Tcode都修改了什么-AUT10