iOS:确定另一个应用程序是否处于事件状态

标签 ios cllocationmanager background-process

我的应用程序需要精确到 10 米左右的设备位置。如果应用程序启动,通常需要例如10 秒以获得所需的精度。这个延迟是可以的。然而,当应用程序“正在使用”时(见下文),延迟应该更短,例如1秒。

问题如下:

当用户关闭显示器时,应用程序从事件状态转换到后台状态(并调用委托(delegate)方法 applicationWillResignActiveapplicationDidEnterBackground)。
通常,位置更新不会在后台完成。因此,下一次应用程序从后台转换到事件状态(委托(delegate)方法 applicationWillEnterForegroundapplicationDidBecomeActive 被调用),位置管理器需要再次,例如10秒达到要求的精度。不幸的是,这种延迟并不行。

为避免这种情况,应用程序可以在后台进行位置更新。这很好用。
缺点是这些后台位置更新会继续,即使不再使用该应用程序,因为用户按下主页按钮并切换到另一个应用程序。这至少有两个原因令人不安:GPS 硬件不必要地处于事件状态并耗电,并且通知用户我的应用程序正在使用设备位置,尽管这不再需要。

因此我的问题是:

是否可以确定另一个应用程序是否处于事件状态?
如果是这样,则可以关闭后台位置更新。

最佳答案

Is it possible to determine if another app becomes active?

不,您的应用只知道它是在后台还是在前台处理委托(delegate)事件。无法知道用户是否打开了另一个应用程序或是否在主屏幕中。

These background location updates continue, even if the app is no longer used, because the user pressed the home button and switched to another app.

我认为你是对的。您可以在应用程序进入后台时启动计时器,并仅在一段确定的时间(一分钟?)内更新本地化。然后,在计时器计数结束时保存最后的定位坐标。计时器用于避免不必要的更新,然后如果用户在合理的时间后没有再次打开您的应用程序,可能是因为他正在使用其他应用程序或他锁定了设备。

当应用程序再次出现在前台时,如果计时器仍处于事件状态,则说明一切正常。否则显示上次保存的本地化并显示一个小“横幅”以告知用户定位在前 10 秒内无法准确(直到达到所需的准确度)

关于iOS:确定另一个应用程序是否处于事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39366411/

相关文章:

iphone - 在另一个 UIImageView 上注册一个 UIImageView

html - 如何在 iOS 上获取最终的 HTML 字符串

linux - 如何根据 Linux 系统调用实现后台进程?

c# - Linux后台进程

android - 获取正在运行的进程列表并终止其后台服务

ios - UIView 未从 super View 中删除

ios - xCode7.3 上的 Swift 错误消息

Xcode Beta 6 - 使用未声明的类型 'CLLocationManagerDelegate'

iphone - 使用定位服务时 iPhone 的电池耗尽

ios - CLLocationManager 最佳实践