android - FusedLocation API - 未调用 onLocationChanged

标签 android fusedlocationproviderapi android-fusedlocation

我们应用中的流程如下:

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

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

我们目前强制执行激活的 GPS 提供程序,因此这不是不活动定位服务的问题。

我已经通过在我们的一部手机上创建用户帐户并启动应用程序来重现该错误,并且我注意到没有调用 onLocationChanged

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

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

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

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

最佳答案

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

编辑:

更好的是,将整个事情重构为根本不使用 google-api-client,看起来像这样:

link (这是 Kotlin ,不管怎样, Kotlin 很好)

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

关于android - FusedLocation API - 未调用 onLocationChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44105614/

相关文章:

java - 在 Android 的内部存储中保存文件

java - android.database.Cursor IndexOutOfBounds : Exception Index -1 requested, 大小为 6

java - 在 Android 应用程序中保留所有 Activity 的列表有什么用?

android - 应用程序获取错误位置,直到打开内置的 Google map 应用程序

java - Android FusedLocationProviderClient.requestLocationUpdates() 返回相同的位置坐标

javascript - 英特尔 xdk 不工作的通知警报

Android 应用无法使用 FusedLocationApi 访问模拟器上的位置

android - Android 5.0 中的融合位置提供程序行为出乎意料

android - 尽管 gradle 文件中存在 Google Play 服务依赖性,但仍未找到融合位置提供程序类

android - 为低于 31 的 API 创建 LocationRequest