我的应用需要设备位置,精确度约为10米。如果该应用程序已启动,通常需要例如10秒即可获得所需的精度。这种延迟是可以的。但是,当应用程序“正在使用”(见下文)时,延迟应该更短,例如1秒。
问题如下:
当用户关闭显示屏时,应用程序会从活动状态转换为后台状态(并调用委托方法applicationWillResignActive
和applicationDidEnterBackground
)。
通常,位置更新不在后台完成。因此,下次应用从后台转换为活动状态(委托方法applicationWillEnterForeground
和applicationDidBecomeActive
被调用)时,位置管理器再次需要例如10秒即可达到要求的精度。不幸的是,这种延迟不行。
为避免这种情况,该应用可以在后台进行位置更新。这很好。
缺点是这些后台位置更新会继续,即使应用程序不再使用,因为用户按下主页按钮并切换到另一个应用程序。这至少有两个原因令人不安:GPS硬件不必要地活动并且使用电源,并且通知用户我的应用程序正在使用设备位置,尽管不再需要。
我的问题是:
是否可以确定其他应用是否有效? 如果是这样,可以关闭后台位置更新。
答案 0 :(得分:2)
是否可以确定其他应用是否变为有效状态?
不,您的应用只知道它是在后台还是前台处理委托事件。知道用户是否打开了另一个应用程序或是否在主屏幕中是不可能的。
即使不再使用该应用,这些后台位置更新仍会继续,因为用户按下主页按钮并切换到另一个应用。
我认为你是对的。当应用程序进入后台并且仅在建立的时间段(一分钟?)内更新本地化时,您可以启动计时器。然后,在计时器计数结束时保存最后的定位坐标。定时器用于避免不必要的更新,如果用户在合理的时间后没有再次打开你的应用程序,可能是因为他正在使用其他应用程序或他锁定了设备。
当应用程序再次进入前台时,如果计时器仍然处于活动状态,那么你很好。否则显示最后保存的本地化并显示一个小“横幅”,告知用户前10秒内无法控制本地化(直到达到所需的准确度)