融合定位API - onLocationChanged未被调用

6
我们的应用程序流程如下:
  1. 显示全屏活动,向用户解释为什么需要GPS位置
  2. 获取GPS权限
  3. 显示加载指示器
  4. 获取第一个地理位置
  5. 将第一个位置发送到服务器
  6. 从服务器加载相关数据
  7. 隐藏加载指示器
我们收到了多个支持请求,用户称什么也没有发生,只看到加载指示器。
目前,我们正在强制执行已激活的GPS提供程序,因此这不是不活动位置服务的问题。
我通过在其中一部手机上创建用户帐户并启动应用程序来复制错误,并且我注意到onLocationChanged未被调用。
代码通过LocationServices.FusedLocationApi.requestLocationUpdates,因此它应该提供位置,但实际上却没有。
我知道我曾经通过打开谷歌地图来解决这个问题,但是
a)我几乎无法想象用户迄今尚未使用过谷歌地图 b)告诉他们打开谷歌地图来修复我们应用程序中的问题听起来很奇怪。

这里是使用的精确代码要点(我在第131行设置了断点,开始调试并到达那里,所以我应该得到位置,但是onLocationChanged方法从未被调用)。


常量.Constants.GPSINTERVAL_REGULAR的值是多少? - Nitin Mesta
GPSINTERVAL_REGULAR是2(所以2分钟),这应该不是问题,到目前为止我尝试过的所有其他设备上都可以正常工作。 - TormundThunderfist
希望在某些特定的用例中,在 onLocationChanged 被调用之前,disconnect 方法不会被意外地调用。请检查您正在调用 locationHandler.disconnect 的位置。 - Nitin Mesta
我在连接和断开连接时都添加了日志,但似乎没有被调用(至少我在logcat中找不到它)。removeLocationUpdates是否可以异步执行? - TormundThunderfist
你的意思是它本身吗?那么它就不应该是这样的。 - Nitin Mesta
我明白了。该死,可能得向某个谷歌员工反馈一下,似乎是服务本身的一个漏洞。无论如何,还是感谢你的帮助! - TormundThunderfist
1个回答

2
“解决方案”,如果您想这么称呼它的话,是告诉用户打开谷歌地图,点击“定位我”按钮,等待谷歌地图找到他们,然后再次打开我们的应用程序,并向我们报告是否有任何变化。
编辑:
更好的方法是重构整个代码,不再使用Google API客户端,大概会像这样: link(这是Kotlin,无论如何,Kotlin很好)
编辑2:我将其从事件总线实现更改为rx-subject。事件总线非常混乱,如果可能,应该避免使用它们。

我遇到了同样的问题,你的“解决方案”解决了它。你知道为什么会发生这种情况吗? - Rabee
@Rabee 很遗憾,我的同事猜测这可能与待机模式有关,但我们无法确认。 - TormundThunderfist
@Rabee 我发现问题是由于用户停用了他们的GPS信标,这会清除先前GPS位置的缓存。至于为什么提供商无法检索新位置,我无法告诉。 - TormundThunderfist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接