1

想象一个应用程序在 30 秒(或更短的时间 - 如果它得到第一次修复)的短时间内侦听 GPS 更新。听之间有一段时间,比如说10-20秒。问题是 - 如果 GPS 在前 30 秒内没有找到修复,它是否会在第二个间隔“从头开始”再次收听时,或者它是否可以以某种方式使用在第一个间隔期间接收到的数据以便可以获得修复更容易/更快?

4

2 回答 2

2

有两个项目会影响您获得修复的能力,这可能取决于之前的 GPS 执行:

1) GPS 辅助信息

2) GPS 引擎为视野中的 GPS 卫星维护的跟踪信息

对于#1:

对于您通过 LocationListener 在 Android 应用程序中获取的 GPS 位置数据,大多数 Android 手机使用由 Qualcomm 创建的名为 gpsOneXTRA 的东西:

http://news.thomasnet.com/companystory/QUALCOMM-Introduces-gpsOneXTRA-Assistance-to-Expand-Capabilities-of-Standalone-GPS-508624

这被认为是一种“辅助 GPS”解决方案,但它通过 IP 连接从服务器(通常在蜂窝网络之外)检索辅助信息。

gpsOneXTRA 辅助数据最长可保存 7 天,尽管有些设备会更频繁地刷新此数据(例如,美国 Sprint Android 设备大约每 48 小时刷新一次),因为 GPS 质量会随着辅助数据的使用时间而下降。

因此,假设它有一段时间没有检索到辅助数据,那么在前 30 秒内最多会检索一次辅助数据。在接下来的 30 秒内,将不会再次检索此辅助数据。

更多关于 gpsOneXTRA 在 2010 Sprint 应用程序开发者大会上的信息,在幻灯片 12 上大约 19:35 分钟:http: //developer.sprint.com/site/global/events/pastevents/2010devcon/videos/sprint_enabling_location_services.jsp

对于#2:

手机 OEM 实施的内部 GPS 引擎跟踪视野中的卫星,这在一定程度上取决于过去的 GPS 观测结果,具体取决于设备的 GPS 灵敏度。因此,GPS 侦听会话之间 10-20 秒延迟的影响将取决于设备的 GPS 灵敏度。

大多数“高灵敏度” GPS 芯片组能够在几秒钟或更短的时间内从冷启动(即没有先前的 GPS 观测)快速获取 GPS 定位,具体取决于室内障碍物,因此 10-20 秒的停机时间确实是不会影响您获得修复的能力。一个例子是 SiRF Star IV:

http://www.sirf.com/products/25/sirfstariv-gsd4t

...可以获取高达 -160dBm 的 GPS 定位。请注意,跟踪引擎的灵敏度高达 -163dBm,因此一旦需要进行初始修复,即使信号恶化,它也可以继续跟踪。

这通常足以在户外立即获得 GPS 定位,并在天空中清晰可见,并且足以在几秒钟内在没有重物障碍物(例如砖、金属或混凝土)的情况下在室内获得定位。除非手机的 GPS 天线很糟糕,或者 GPS OEM 软件真的搞砸了(这是可能的),否则在具有高灵敏度 GPS 芯片组的现代 Android 手机中,10-20 秒的延迟应该不会对您获取的能力产生巨大影响一个修复。

Mike Lockwood 的 GPSTest 应用程序非常适合查看您的手机当前可以看到哪些卫星,并且您可以在该应用程序中启动和停止 GPS 观测,因此您可以看到延迟对手机跟踪 GPS 卫星的能力有何影响:

https://play.google.com/store/apps/details?id=com.android.gpstest

旁白:

Luis 提到的行为实际上是许多 Jelly Bean 4.1 之前的 Android 设备上普遍存在的错误。一些设备连续进行 11 次修复然后休息,其他设备将每秒连续采样,无论将什么 minTime 参数传递给 LocationManager 的 Location Listener。

与 Android 团队有关此问题的完整讨论如下:

https://android-review.googlesource.com/#/c/34230/

在 Android 4.1 JellyBean 中添加了一个新的 CTSVerifier 测试,应该可以防止在 JellyBean 及更高版本上发生这种情况。

于 2012-10-05T01:38:55.833 回答
1

我对一些设备的经验是,当您到达新位置时,您将收到 11 次 onLocationChange() 调用,每秒一次。

如果您将更新之间的时间设置为小于该值(11 秒),则 GPS 将每秒连续调用 onLocationChange() 更新位置,而不会中断。

如果您将更新之间的时间设置为大于该值(几分钟),它将保持调用 11 次 onLocationChange() 然后停止几秒钟,并在该时间后重新启动 11 次调用 onLocationChange() . 不会再调用onFirstFix(),获取卫星信号没有延时。

我从未尝试将更新之间的时间设置为以小时为单位的值,所以对此我不知道。

祝你好运。

于 2012-10-05T00:24:50.943 回答