融合位置 GPS 在打开 Google 地图之前不会更新

Posted

技术标签:

【中文标题】融合位置 GPS 在打开 Google 地图之前不会更新【英文标题】:Fused Location GPS doesn't update until opening Google Maps 【发布时间】:2017-06-01 22:22:01 【问题描述】:

我在我的应用程序中使用融合位置提供程序,它设置为PRIORITY_HIGH_ACCURACY,间隔为 60 秒。这通常有效,但有时位置不会自行更新 5 到 10 分钟,而且当我打开 Google 地图时,它似乎会触发位置更新。

这里还有其他人可能遇到过此问题或知道此行为背后的可能原因吗?有没有办法解决这个问题?

【问题讨论】:

你有精细定位权限吗? 是的,精细的和粗糙的。 您是请求位置更新还是定期轮询getLastLocation() 方法? 我通过onLocationChanged()方法请求位置。 @Zishan 你的问题解决了吗?有同样的概率吗?欢迎任何想法。 【参考方案1】:

我从以下link 发现的 Fused Location Provider 仅在至少有一个客户端连接到它时才会保持后台位置。一旦第一个客户端连接,它将立即尝试获取位置。如果您的活动是第一个连接的客户端,并且您立即在onConnected() 中调用getLastLocation(),则可能没有足够的时间让第一个位置进入。这将导致位置为null

要解决此问题,您必须(不确定地)等待,直到提供者获取位置,然后调用getLastLocation(),这是不可能知道的。

另一个(更好的)选项是实现com.google.android.gms.location.LocationListener 接口以接收定期位置更新(并在获得第一次更新后将其关闭)。

【讨论】:

【参考方案2】:

即使通过 FusedLocationProvider api 或 LocationManager LocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) 提供位置,Gps 也不总是返回位置。特别是,如果您在室内,则不太可能从 Gps 获取位置,具体取决于您设备的 Gps 芯片。必须固定 Gps 才能返回位置。

您可以编写一个具有带 Gps、Wifi 和 GpsStatusListener 的 LocationManager 的测试应用程序来检查卫星计数、修复中的卫星和卫星信号强度,并同时将其与 FusedLocationProvider 进行比较,并将提供的位置添加到地图作为标记.您还可以为 FLP 查找 Location.getExtras(),其中可能包含有关卫星的信息。即使 LocationManager Gps 可用且卫星数为 2,我也无法从 Gps 获取位置。

图像中的 Hello World 应该是 Gps 位置,但由于尚未修复,因此未返回。 测试可能无法解决您的问题,但您可以比较您获得位置的情况,或者您不能,例如可能需要使用 3 颗卫星从 Gps 或最小信号强度获取位置。 Gps 锁定也可能需要很长时间,并且GpsStatusListener 上的状态在锁定时设置为GpsStatus.GPS_EVENT_FIRST_FIX。我花了大约 5 分钟的时间来修复 Gps 并返回位置。我还用地图编写了另一个测试,但在定位管理器和 FLP 上都修复了 Gps 之前,我遇到了同样的问题。

【讨论】:

以上是关于融合位置 GPS 在打开 Google 地图之前不会更新的主要内容,如果未能解决你的问题,请参考以下文章

GPS不准确时如何计算可能位置的面积(如在谷歌地图中)

怎么让手机模拟gps地图位置信息?

使用 Google 地图 API 在 100 英里半径内使用相同产品的人们的 GPS 位置

在 Google 地图导航正在运行时请求位置更新

在线地图定位器 api,如 GPS

使用gps从纬度和经度获取当前位置