我想知道一些解释这一切的信息。我有一个使用GPS的应用程序(在几款HTC的旧手机和谷歌Nexus 7上进行测试),我注意到--和其他一些应用一样-- GPS位置更新可能会变得“缓慢”。似乎发生的是更新(1/秒-这个应用程序需要良好的最新信息)通过OK,但通常的lat/长值不变(当移动)。有趣的是,alt通常是这样的。
在阅读了一些堆栈溢出之后,我发现使用以下代码“重置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);
可以用于更新needs缓存的信息,以获得更快的锁定(短时间),但需要一个网络连接来执行下载。我还没试过呢。
我遇到的问题是,我在任何地方都找不到关于这些命令是什么、它们做什么、什么时候应该使用、什么时候应该使用、为什么会发生这些命令的详细信息,等等。
我真正想要的是被指向某个地方,我可以读到这一切的背景。我会非常高兴,如果它看起来稍微长一些锁定,只要它没有退化随着时间的推移。
发布于 2014-10-24 06:14:56
force_xtra_injection导致gps软件向Xtra服务器请求帮助信息。Xtra是一个由特定供应商支持的专有协议。据我所知,它并没有被详细描述,但我想它确实包括了卫星的星历数据。
force_time_injection在全球定位系统软件中强制提供时间援助。时间必须是GPS格式的。这是通过使用NTP来确定GPS时间的合理精确值来实现的,并将其提供给您手机中的gps软件,以帮助建立初始位置。时间辅助只用于第一个计算的位置。在第一个位置之后,GPS接收机知道的时间比你从外部软件接口所能提供的精度要高得多。
星历是每颗卫星的轨道模型。它使用一个复杂的公式来指定卫星在太空中的位置,如果你给它时间。卫星通过轨道以3.8公里/秒的速度移动,因此尽可能准确地指定时间是非常重要的。
时间辅助不是真正用于计算一个位置,而是用来确定(以及星历或历书)你所在位置(或最后一个已知位置)所看到的卫星,以及该卫星的近似多普勒值。这使得GPS接收机可以缩小搜索参数,并且有更好的机会在低信号强度下找到卫星,并且比没有时间更快地找到卫星。
如果lat/long值没有变化,这是由于以下几个原因:
1)该位置不是实际的GPS位置,它是基于WiFi数据、cellID数据或其他来源的。您可以查看位置的不确定性,以获得关于使用哪个源的线索。如果不确定性是几百米或数千米,它是基于单元ID的。如果第一个位置弹出得非常快,而且信号条件很糟糕(你在信号被阻塞的地方,但仍然有二三十米的精度),那么你可能在使用WiFi定位。
2) GPS软件是夹紧位置报告。这是大多数人更喜欢改善用户体验的东西。没有人愿意坐在红绿灯前,看到他们的GPS位置在他们不开车的时候四处游荡。如果夹紧,你可以开始移动,夹子应该释放,并开始跟踪你的位置在短时间后。
3)信号条件很差,GPS位置更新很慢。
从GPS获得好位置的最佳方法是处于良好的信号状态,并连接到internet,以便您可以从某个服务器获得辅助数据(星历、位置和当前GPS时间)。
https://stackoverflow.com/questions/24227998
复制相似问题