融合位置 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 地图之前不会更新的主要内容,如果未能解决你的问题,请参考以下文章