【问题标题】:How can you update location data in Windows Phone in the background?如何在后台更新 Windows Phone 中的位置数据?
【发布时间】:2012-04-20 00:38:12
【问题描述】:

我刚刚读到,虽然 Windows Phone 7.5 后台任务可以轮询位置,但它们实际上并没有从 GPS 实时轮询,而是位置 API 调用返回一个系统缓存的位置,该位置仅每十五分钟更新一次.

当然,这种限制会使任何在后台运行导航的尝试完全无效,因为您可能会在 15 分钟内偏离轨道,更不用说后台任务只能每 30 分钟左右运行一次!

也就是说,诺基亚的导航应用程序和据说 Runtastic 的应用程序在后台(即不仅仅是在锁定屏幕下)会继续跟踪,并且两者都在市场上意味着它们已获得批准,所以有人知道他们是如何做到的SDK 不支持什么?

作为参考,我们实际上并不需要实时跟踪...也许每分钟一次左右,我们不需要那么高的准确度...也许 100 英尺左右...但我们确实需要比我们得到的还要多。我们只是不知道他们在获批应用中的表现如何。

【问题讨论】:

  • 是的,它很糟糕,但它有据可查。 Maby WP8 会有一个解决方案。
  • 在屏幕锁定下运行您的应用并关闭 IdleDetection。
  • Derek...这太疯狂了,因为这会耗尽电池。此外,这还要求我们的应用程序处于前台,这首先违背了后台任务的目的。 @Rich,是的,它已记录在案,但诺基亚有一个导航应用程序可以做到这一点,而且它们不是第一方的(ala 像宽动态磁贴)。如果微软给他们独家访问权限,那真的很糟糕,特别是因为诺基亚和微软都在抱怨他们需要更多的应用程序,然后阻碍我们创建它们的能力。简直疯了。 (另外,诺基亚的 GPS 应用很臭。)
  • 没错,不过现在很多 GPS 应用都是这样做的。

标签: windows-phone-7 location background-process background-agents


【解决方案1】:

您只能在 PeriodicTask 执行时检索位置(大约每 ~ 30 分钟一次,具体取决于操作系统调度)。它从GeoCoordinateWatcher 获取的位置数据将来自操作系统的缓存,而不是直接来自 GPS 硬件。如果没有任何东西在运行,操作系统将大约每 15 分钟用粗粒度数据更新一次。但是,如果应用程序已经执行并检索了细粒度的 GPS 硬件数据,那么这将是您将在 PeriodicTask 中检索的数据。您可以通过访问前台应用程序中的 GPS 并使用 ScheduledActionService.LaunchForTest 强制安排 PeriodicTask 来查看此类示例。

【讨论】:

  • 这基本上就是我所领导的。您刚刚添加了有关另一个应用程序更新缓存的内容,但除了 my 后台任务仍然只访问缓存数据这一点之外。实际上,您可以使用每十分钟运行一次的繁重后台任务。但是同样,这仍然不能回答是否可以完成的问题。当然可以,因为诺基亚有一个导航应用程序,而且它们不是第一方的(ala 宽动态磁贴),但话又说回来,也许他们拥有独家访问权,我们其他人不感谢他们的 MS 合作伙伴关系,这将是一个遗憾.
  • 我认为“繁重的后台任务”是指ResourceIntensiveTask?如果是这样,我看不到它们可以每 10 分钟运行一次,而是可以运行最多 10 分钟。但是考虑到对它们施加的其他限制(必须有电源、WiFi、> 90% 电池、屏幕锁定。参考:msdn.microsoft.com/en-us/library/hh202942(v=vs.92).aspx)我怀疑它对你有用。长话短说:标准SDK似乎无法实现您直接提出的要求。您可能需要研究互操作(参考:forum.xda-developers.com/showthread.php?t=1299134)但是...
  • 使用互操作需要解锁设备互操作。有传言说,一些市场摄取的应用程序正在使用本机和互操作代码(参考:pocketnow.com/windows-phone/…),但至于是否允许您的应用程序使用此类代码进入市场?你在赌一把。这听起来像是在获得认证时可能需要技术豁免的东西。认证/豁免详情:msdn.microsoft.com/en-us/library/hh202928(v=vs.92).aspx
  • 啊啊啊! @Mrm,你是对的!我读错了。 “最多”,而不是“每个”。 (是的,名字弄错了。)我真的不知道如果它们每 30 分钟更新一次,MS 怎么能称它们为“动态磁贴”,虽然是的,但你可以随心所欲地更新它们,而你在你的应用程序中,这违背了目的,因为你已经有一个完整的屏幕可以使用,所以你不需要瓷砖!我的意思是忘记GPS...我们甚至不能写一个简单的钟面!我对 MS 和这个完全荒谬的限制感到非常、非常 失望。认真考虑退回新的 Lumia 900。
  • 再一次,是的!查看诺基亚的 GPS 应用程序!它做到了。显然,一个名为 Runtastic 的应用程序也是如此(而 Runkeeper 没有。)问题是如何。如果 MS 不向我们提供这些,那么他们又怎么能抱怨他们的平台没有足够的支持呢。
【解决方案2】:

根据我在后台任务方面的经验,您将无法通过 Periodic 或 ResourceIntensive 后台任务实现您想要的。

尽管文档声称它们每 30 分钟运行一次,但我的经验是它们会偶尔运行且无法预测。在过去的 14 小时内,我的应用程序的周期性任务总共运行了 6 次,而且每天都非常一致 - 它大约每两个小时运行一次。对于资源密集型任务,我发现它们通常每晚运行两次。我猜操作系统必须平衡手机上的所有进程和所有其他要求运行后台任务的应用程序,所以有时你的应用程序并没有成功。显然,您的里程可能会因您的手机(在我的情况下为 lumia 800)和您安装的应用程序而异。

如果您想编写一个每分钟跟踪一次您的位置的应用程序,我的建议是通过disabling idle detection 使其能够在锁定屏幕下运行,并确保它具有较低的内存占用以延长电池寿命。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多