我在我的应用中使用融合位置提供程序,以60秒的间隔设置为PRIORITY_HIGH_ACCURACY
。这通常有效但有时位置本身不会更新5到10分钟,而当我打开Google地图时,它似乎会触发位置更新。
此处有其他人可能遇到此问题或知道此行为背后的可能原因?有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
Gps并不总是返回一个位置,即使它可以通过FusedLocationProvider api或LocationManager LocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
获得。特别是,如果你在室内,根据你设备的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来修复并返回一个位置。我还用地图编写了另一个测试,直到Gps在LocationManager和FLP上都得到修复后我才遇到同样的问题。
答案 1 :(得分:1)
以下link融合位置提供程序的调查结果仅在至少有一个客户端连接到它时才会保留后台位置。一旦第一个客户端连接,它将立即尝试获取位置。如果您的活动是第一个要连接的客户,并且您在getLastLocation()
中立即致电onConnected()
,则可能没有足够的时间让第一个地点进入。这将导致该地点为{{1 }}
要解决此问题,您必须等待(不确定),直到提供者获取位置,然后调用null
,这是不可能知道的。
另一个(更好)选项是实现getLastLocation()
接口以接收定期位置更新(并在第一次更新后将其关闭)。