2017-05-14 60 views
1

我在写一个应用程序,需要使用GPS进行频繁的位置检查。它需要每10-15秒获取一次当前位置,然后将其写入数据库(数据库部分对于这个问题大多不相关,只是想把它扔到那里)。我面临的问题是,我找不到一个体面的方式来完成这一点。我试过几件事:如何在Codename One中获得频繁的背景GPS更新?

  1. 使用LocationManager.getBackgroundLocationListener()似乎从来没有工作。我已经在Android和iOS上尝试过它,似乎没有任何事情发生。可能是我做错了什么,但无论如何,我已经读过iOS版本,它只会在移动到不同的手机信号塔时受到攻击,因此无法满足我的需求。

  2. 我试过使用后台抓取,但它只在Android上可靠。 iOS上的频率完全是随机的,因此这也不符合我的需求。

  3. 我试过刚开始一个新的线程,每10-15秒就会获取一个当前位置,但这只有在屏幕打开并且该应用程序正在使用时才有效。这不会满足我的需求,因为我需要确保它在切换到其他应用程序时继续获取位置更新。

有没有人有任何建议的替代方法来解决这个问题?请注意,我在objective-c中没有背景,因此像Codename One这样的跨平台解决方案实际上是我唯一的选择。

回答

1

在这种情况下,背景获取并不是正确的选择,因为iOS期望您声明您实际正在做的事情。你试图做的事情在iOS中是被禁止的,在Android中也可能有问题。

在后台抓取位置数据(特别是在这个分辨率下)有严重的隐私问题,所以我怀疑它会起作用。在前台执行此操作应该可以正常工作,以允许导航等使用案例,但在后台可能会出现问题。

由于位置和网络是大型电池耗尽活动,这一事实进一步加剧了这一点。因此,您可以使用这些API的解决方案是有限的。背景最常见的用例之一是地理围栏,它允许您跟踪用户何时接近重要的兴趣点。这个API存在的原因是为了降低轮询成本并将位置使用量降到最低。

请注意,iOS都提供了检测用户电池使用情况的工具,这些工具可能会影响行为不当的应用。

+0

谢谢谢,非常有帮助。看来iOS目前对这款应用的限制太多了。我已经发布它作为一个Android应用程序,所以我想现在会保持这种状态。我真的很喜欢CN1。如果我编写另一个不依赖于背景数据的应用程序,我将来一定会使用它。 –

+0

就这样,我们清楚这些限制是从本机派生的,与Codename One无关。如果你将解释你正在试图用应用程序完成的事情,那么Apple可能会为该用例提供解决方法。 –