我的应用程序需要精确到 10 米左右的设备位置。如果应用程序启动,通常需要例如10 秒以获得所需的精度。这个延迟是可以的。然而,当应用程序“正在使用”时(见下文),延迟应该更短,例如1秒。
问题如下:
当用户关闭显示器时,应用程序从事件状态转换到后台状态(并调用委托(delegate)方法 applicationWillResignActive
和 applicationDidEnterBackground
)。
通常,位置更新不会在后台完成。因此,下一次应用程序从后台转换到事件状态(委托(delegate)方法 applicationWillEnterForeground
和 applicationDidBecomeActive
被调用),位置管理器需要再次,例如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/