Android - 获得 GPS 信号需要很长时间。如何实现一个好的 GPS 提供商?

Posted

技术标签:

【中文标题】Android - 获得 GPS 信号需要很长时间。如何实现一个好的 GPS 提供商?【英文标题】:Android - It takes long to get a GPS-Signal. How to implement a good GPS provider? 【发布时间】:2012-08-14 14:18:12 【问题描述】:

我写了一个应用程序,它可以在慢跑时跟踪 gps 位置。不幸的是,该应用程序需要一些时间才能获得 GPS 信号。当我打开谷歌地图等其他应用程序时,他们会立即获得位置。

我的问题是:如何实现 gps-provider,以便应用尽快获得信号。

一个想法是,使用应用程序启动服务,以便提供商做一些初步工作。但是跟踪活动不是主要活动。如何将服务绑定到尚未启动服务的活动中?这是个好主意吗?

感谢阅读 - 我希望我的英语是可以理解的,

马提尼

【问题讨论】:

“某个时间”有多长,1 分钟? 5分钟?通常,从 GPS 冷启动开始的 TTFF(首次修复时间)通常长达 15 分钟,因为下载星历数据需要一段时间。 在大多数情况下,“一段时间”是指 1-2 分钟。但有时“一段时间”意味着等待 > 5 分钟。冷启动的意思是:只开gps(手机可能整天都在跑)还是开手机? 我更多的是指通用 GPS,我对 android 实现不太熟悉,但冷启动通常意味着当最后一个已知位置不可用时。热启动是 GPS 首次打开并且已知最后一个已知位置(这有助于加快卫星捕获)。 【参考方案1】:

正如我在 cmets 中提到的,GPS 启动不是一个即时过程。接收器基本上必须知道星座中每个 GPS 卫星的位置,才能计算出它的位置。 ephemeris data 描述了接收到的卫星位置,并在 GPS 打开时从卫星上下载(我差点忘了提及 almanac data,它也是下载的一部分,并描述了卫星的轨道)。诸如从多颗卫星下载和使用最后一个已知位置可以帮助加快这个初始过程,但你不能让它“立即”。

还有其他策略可用于帮助加快定位过程,尤其是在手机中。除了最后已知的位置之外,当 GPS 仍在获取过程中时,可以使用蜂窝塔 + 定时定位 (ECID) 或 Wi-Fi 定位等代替 GPS。

这个link描述了一些关于如何在android中处理定位手机的想法,但简短的是:

检查最后一个已知位置(如果太旧则丢弃) 检查 E-CID 位置(这非常快,但非常粗略 位置) 检查 Wi-Fi 位置(这可能非常准确,但需要打开 WiFi,有时会出现大量错误) 终于获得GPS位置

【讨论】:

感谢您的回答和链接。我将尝试描述的流模型来获取位置。您的解释有助于我理解背后的问题:获取 gps 信号和准确位置是我必须定义/实施的过程。 [马提尼] 我想,问题解决了。现在,我将按照提示尝试实施一种正确的方法来处理我的应用程序中的 gps-topic。 [马提尼]【参考方案2】:

您是否首先检查是否有可以使用的最后一个已知位置?大多数应用程序首先检查它,然后搜索位置。

【讨论】:

现在,我正在检查最后一个已知位置。活动快速显示位置。非常感谢!马提尼酒。 但它仍然需要一些时间来获得新职位。有没有人知道如何使用该服务,当它由上一个(主要)活动启动时?所以服务可以在需要位置之前等待位置更新?

以上是关于Android - 获得 GPS 信号需要很长时间。如何实现一个好的 GPS 提供商?的主要内容,如果未能解决你的问题,请参考以下文章

在 GPS 芯片长时间处于活动状态后,Android 设备需要重启/重启才能获取 GPS 位置

如何阻止用户等待很长时间才能获得位置修复?

在 Android 中同时使用 GPS 和 Network Provider

Android MediaPlayer 需要很长时间来准备和缓冲

ContentResolver.openAssetFileDescriptor() 在 Android 12 中需要很长时间

异步任务进度对话框需要很长时间才能完成 android 中的简单任务