6

我正在寻找一些解释这一切的信息。我有一个使用 GPS 的应用程序(在几部旧的 HTC Desire 手机和 Google Nexus 7 上进行了测试),我注意到 - 与其他一些应用程序一样 - GPS 位置更新可能会变得“缓慢”。似乎发生的情况是更新(1/秒 - 此应用程序需要良好的最新信息)通过 OK,但通常纬度/经度值不会改变(四处移动时)。有趣的是,alt 通常会这样做。

在阅读了 Stack Overflow 之后,我发现使用以下代码“重置 GPS”(使用权限 android.permission.ACCESS_LOCATION_EXTRA_COMMANDS):

Bundle  extras = new Bundle();

extras.putBoolean("all", true);
locManager.sendExtraCommand("gps", "delete_aiding_data", extras);

似乎有帮助:位置有一个初始中断,然后真正的更新似乎更有用 - 直到它再次发生。

我还阅读了以下代码

Bundle bundle = new Bundle();

locManager.sendExtraCommand("gps", "force_xtra_injection", bundle);
locManager.sendExtraCommand("gps", "force_time_injection", bundle);

可用于更新 A-GPS 缓存信息以获得更快的锁定(短时间),但需要网络连接才能执行下载。我还没试过这个。

我遇到的问题是,我无法在任何地方找到关于这些命令是什么、它们做什么、何时应该使用和不应该使用它们、为什么这一切都会发生等等的详细信息。有一些,但这只是一点点轶事。

我真正追求的是被指向某个我可以阅读所有背景的地方。如果它看起来稍微长一点,我会非常高兴,前提是它不会随着时间的推移而退化。

4

1 回答 1

7

force_xtra_injection 使 gps 软件向 Xtra 服务器请求帮助信息。Xtra 是特定供应商支持的专有协议。据我所知,它并没有真正详细描述,但我想它确实包括卫星的星历数据。

force_time_injection 强制时间辅助进入 GPS 软件。时间必须是 GPS 格式。这是通过使用 NTP 确定 GPS 时间的合理准确值并将其提供给手机中的 gps 软件来帮助确定初始位置来完成的。时间辅助仅用于第一个计算位置。在第一个位置之后,GPS 接收器知道的时间比您从外部软件界面提供的精度要高得多。

星历是每颗卫星的轨道模型。如果你给它时间,它使用一个复杂的公式来指定卫星在太空中的位置。卫星以约 3.8 公里/秒的速度在其轨道上移动,因此尽可能准确地指定时间非常重要。

时间辅助并不是真正用于计算位置,它用于确定(连同星历或历书)在您的位置(或最后一个已知位置)可以看到哪些卫星,以及该卫星的近似多普勒值是多少。这允许 GPS 接收器缩小搜索参数,并有更好的机会找到低信号强度的卫星,并且比没有时间更快地找到卫星。

如果 lat/long 值没有变化,那有几个原因:

1) 该位置不是真正的 GPS 位置,它基于 WiFi 数据、cellID 数据或其他来源。您可以查看位置不确定性以了解使用了哪个源。如果不确定性为数百或数千米,则基于小区 ID。如果第一个位置弹出非常快并且您的信号条件很差(您在信号被阻挡的内部,但仍然获得 20 或 30 米的精度),那么您可能正在使用 WiFi 定位。

2) GPS 软件是夹紧位置报告。这是大多数人更喜欢改善用户体验的东西。没有人愿意在不开车的时候坐在红绿灯前看到他们的 GPS 位置四处游荡。如果夹紧,您可以开始移动,并且夹具应该会在短时间内释放并开始跟踪您的位置。

3)您的信号条件非常糟糕,并且 GPS 位置正在更新,但更新速度非常慢。

从 GPS 获得良好位置的最佳方式是保持良好的信号条件并连接到互联网,以便您可以从某些服务器获取辅助数据(星历、位置和当前 GPS 时间)。

于 2014-10-24T06:14:56.923 回答