【问题标题】:Android FusedLocationProviderClient suddenly no longer calling callback with LocationAndroid FusedLocationProviderClient 突然不再使用 Location 调用回调
【发布时间】:2021-05-08 22:26:38
【问题描述】:

大约两周前,我们应用的几个区域随机停止工作,特别是那些依赖于最新位置的区域。这发生在多个设备上,包括真实设备和模拟器。在此之前,它每次都有效。对我们来说幸运的是,所有停止工作的东西都在一个标志后面,我们能够在生产中禁用它。

我们的位置包装器代码两年来几乎没有被修改过,并且在最近一次更改(这是微不足道的)之后的一个月内运行良好。换句话说,它已经运行了两年没有问题。下面的片段。

现在,在注册接收位置更新后,我们在大部分时间的回调中不再收到结果。这是回调和其他相关的sn-ps:

  private val locationCallback = object : LocationCallback() {
    override fun onLocationResult(locationResult: LocationResult?) {
      Timber.tag("DERP").d("LocationProviderImpl.onLocationResult: got location; loc=${locationResult?.lastLocation}; thread=${Thread.currentThread().name}")
      locationResult ?: return
      subject.onNext(locationResult.lastLocation)
    }
  }
  override fun getUpdatedLocation(request: LocationRequest): Observable<Location> {
    try {
      client.requestLocationUpdates(request, locationCallback, Looper.getMainLooper())
    } catch (e: SecurityException) {
      Timber.tag(LOGTAG).d(e, "security exception getting last location")
    }

    return subject
  }
  fun getDefaultLocationRequest(): LocationRequest = LocationRequest()
    .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
    .setNumUpdates(1)
    .setFastestInterval(TimeUnit.MILLISECONDS.toMillis(500))

这是我们正在使用的库/版本:

  implementation 'com.google.android.gms:play-services-auth:19.0.0'
  implementation 'com.google.android.gms:play-services-base:17.5.0'
  implementation 'com.google.android.gms:play-services-location:17.1.0'
  implementation "com.google.android.gms:play-services-gcm:17.0.0"

其他一些注意事项:

  • 回调间歇性地获得结果(可能 15 次尝试中的 1 次)
  • 没有押韵或理由说明原因,尝试了许多不同的 hack 以使其在没有运气的情况下启动。
  • lastLocation 每次都有效,但通常是陈旧的。
  • 首先调用 lastLocation 似乎不会使回调工作更可靠,这似乎在文档中表明。
  • 此位置提供程序(融合客户端的封装)已在应用的多个区域使用,但直到最近我们才开始在我们的最新功能中更多地使用它。

是否有某种类型的配额或限制是我们以前没有达到但现在却达到的?还有什么可能导致这种情况的吗?

【问题讨论】:

    标签: android location fusedlocationproviderapi android-fusedlocation fusedlocationproviderclient


    【解决方案1】:

    您好,我最近遇到了完全相同的问题。它首先出现在一个设备上,然后出现在另一个设备上。与您的情况一样,我没有对定位服务进行任何修改,它刚刚开始发生,我要么根本没有回调,要么在启动时只有 1 或 2 个。虽然我只能推测崩溃的根本原因是什么,但我认为该错误不在您的应用程序中,而是在 Google Play 服务中。

    在我的情况下,重新启动应用程序没有帮助,但重新启动设备有帮助。我注意到在第一个错误发生之前,Google Play 服务最近有更新,我怀疑这可能与它有关。

    如果您能够重现此问题,可能值得记录:

    GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(mContext);
    

    或尝试:

    GoogleApiAvailability.getInstance().makeGooglePlayServicesAvailable(activity)
    
    GoogleApiAvailability.getInstance().checkApiAvailability(googleApi)
    

    我知道这不是一个真正的答案,但也许它有助于更​​接近根本原因

    【讨论】:

      【解决方案2】:

      试试降级版本

      implementation 'com.google.android.gms:play-services-location:17.0.0'
      

      我也遇到过,我认为这是17.1.0版本的bug

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-08
        • 2013-05-30
        • 1970-01-01
        • 1970-01-01
        • 2017-01-29
        • 1970-01-01
        • 2013-12-22
        相关资源
        最近更新 更多