【问题标题】:FusedLocation API - onLocationChanged is not calledFusedLocation API - 未调用 onLocationChanged
【发布时间】:2017-10-21 16:23:59
【问题描述】:

我们应用中的流程如下:

  1. 显示全屏活动,向用户解释我们为什么需要 GPS 定位
  2. 获取 GPS 权限
  3. 显示加载微调器
  4. 获取第一个地理位置
  5. 将第一个位置发送到服务器
  6. 从服务器加载相关数据
  7. 隐藏加载微调器

我们收到了来自用户的多个支持请求,他们说没有任何反应,他们只看到加载微调器。

我们目前正在强制执行激活的 GPS 提供商,因此这不是定位服务不活跃的问题。

通过在我们的一部手机上创建用户帐户并启动应用程序,我设法重现了该错误,我注意到未调用 onLocationChanged

代码通过LocationServices.FusedLocationApi.requestLocationUpdates,因此它应该提供位置,但它没有

我知道我过去通过打开谷歌地图解决了这个问题,但是

a) 我很难想象到目前为止用户还没有使用谷歌地图 b) 告诉他们打开谷歌地图来解决我们应用程序中的问题听起来很奇怪

here 是使用的确切代码的要点(我在第 131 行设置了一个断点,开始调试并到达那里,所以我应该获取位置,但永远不会调用 onLocationChanged 方法

【问题讨论】:

  • Constants.GPSINTERVAL_REGULAR 的值是多少
  • GPSINTERVAL_REGULAR 是 2(所以 2 分钟),这应该不是问题,它适用于我迄今为止尝试过的所有其他设备
  • 希望由于某些特定的用例,在调用 onLocationChanged 之前不会以某种方式调用 disconnect 方法。请检查您在哪里调用 locationHandler.disconnect
  • 我添加了一个 logd 来连接和断开连接,它似乎没有被调用(至少我在 logcat 中找不到它)。 removeLocationUpdates 可以异步执行吗?
  • 你是指自己。那么它不应该是。

标签: android fusedlocationproviderapi android-fusedlocation


【解决方案1】:

如果你想这样称呼它,“解决方案”是告诉用户打开谷歌地图,点击“定位我”按钮,等到谷歌地图找到他们,然后再次打开我们的应用程序并报告给我们是否什么都做

编辑:

更好的是,重构整个事情以完全不使用 google-api-client,看起来像这样:

link(是 kotlin,随便吧,kotlin 不错)

编辑 2:我将其从事件总线实现更改为 rx 主题。事件总线真的很脏,如果可能的话,你应该远离它们

【讨论】:

  • 我遇到了同样的问题,您的“解决方案”解决了它。你知道为什么会这样吗?
  • @Rabee 很遗憾不是,我的同事推测它与打盹模式有关,但我们无法确认
  • @Rabee 我发现问题是由于用户停用了他们的 GPS 转发器,这会清除以前 gps 位置的缓存。至于为什么提供者不检索新位置,我说不出来
猜你喜欢
  • 2017-08-09
  • 1970-01-01
  • 2019-02-07
  • 2023-03-13
  • 2015-09-28
  • 2014-11-23
  • 2017-08-27
  • 2012-08-09
  • 1970-01-01
相关资源
最近更新 更多