首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android FusedLocationProviderClient突然不再用位置调用回调。

Android FusedLocationProviderClient突然不再用位置调用回调。
EN

Stack Overflow用户
提问于 2021-02-04 15:28:47
回答 2查看 404关注 0票数 3

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

我们的位置包装器代码两年来几乎没有被修改过,在它最近的变化(这是微不足道的)之后的一个月里,它运行得很好。换句话说,它已经在没有问题的情况下工作了两年。下面的片段。

现在,在注册以接收位置更新之后,我们不再在回调中获得结果,大部分时间是。下面是回调和其他相关片段:

代码语言:javascript
运行
复制
  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)
    }
  }
代码语言:javascript
运行
复制
  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
  }
代码语言:javascript
运行
复制
  fun getDefaultLocationRequest(): LocationRequest = LocationRequest()
    .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
    .setNumUpdates(1)
    .setFastestInterval(TimeUnit.MILLISECONDS.toMillis(500))

下面是我们正在使用的lib/版本:

代码语言:javascript
运行
复制
  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次),没有韵律,也没有原因,每次都尝试了许多不同的方法来让它在没有luck.

  • lastLocation工作的情况下启动,但是stale.

  • calling lastLocation第一次似乎并不能使回调工作更加可靠,就像它在文档中显示的那样。

  • 这个位置提供程序(围绕融合客户端的包装器)被用于应用程序的几个领域,但直到最近我们才开始在我们的最新功能中更多地使用它。

我们以前没有达到但现在有这样的配额或限制吗?还有什么可能导致这件事的吗?

EN

回答 2

Stack Overflow用户

发布于 2021-02-17 15:08:31

试着降级版本

代码语言:javascript
运行
复制
implementation 'com.google.android.gms:play-services-location:17.0.0'

我有同样的想法,我认为这是17.1.0版本中的一个bug

票数 0
EN

Stack Overflow用户

发布于 2021-10-13 05:59:57

嗨,我最近一直在努力解决同样的问题。它首先出现在一个设备上,然后又出现在另一个设备上。在您的例子中,我没有对location服务做任何修改,它刚刚开始发生,要么根本没有回调,要么在启动时只有1或2个回调。虽然我只能推测是什么原因造成的崩溃,我认为错误不是在你的应用,而是在谷歌播放服务。

在我的例子中,重新启动应用程序没有帮助,但是重新启动设备起了作用。我注意到,在第一个bug发生之前,google play服务就有了更新,我怀疑这可能与此有关。

如果您能够重新处理此问题,则可能值得记录如下:

代码语言:javascript
运行
复制
GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(mContext);

或试验:

代码语言:javascript
运行
复制
GoogleApiAvailability.getInstance().makeGooglePlayServicesAvailable(activity)

GoogleApiAvailability.getInstance().checkApiAvailability(googleApi)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66048704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档