我有以下代码按预期工作,但是当我请求使用如下所示的 stopLocationUpdates 方法删除位置更新时,尽管位置更新已按要求停止,但我附加到 onCompleteListenerremoveLocationUpdates 不会在第一个请求时触发。但是,在下一个请求时,会触发 onCompleteListener 回调。

/**
 * Provides access to the fused location provider API
 */
private FusedLocationProviderClient mFusedLocationClient;


/**
 * Removes location updates from the FusedLocationApi
 */
private void stopLocationUpdates() {
    if (!mRequestingLocationUpdates) {
        // Updates were never requested.
        return;
    }

    // Remove location request when activity is in a paused or stopped state.
    mFusedLocationClient.removeLocationUpdates(mLocationCallback)
            .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    mRequestingLocationUpdates = false;
                }
            });
}

最佳答案

我没有 50 个报告。评论,所以我在这里写我的评论。

如果你添加一个.addOnFailureListener,它会在第二次拍摄时报告这样的错误吗?

W/System.err: com.google.android.gms.common.api.ApiException: 13: listener already unregistered

RG

2017.04.17 更新:

添加 .addOnFailureListener(getActivity(), new OnFailureListener()...) 和 .addOnSuccessListener(getActivity(), new OnFailureListener()...) 并发现以下内容:
  • 三个(包括初始 addOnCompleteListener(getActivity(), new OnCompleteListener()...))监听器都没有在此(第一个)removeLocationUpdate 请求上调用。
  • 在第二个请求中,首先调用 addOnCompleteListener 监听器(看起来一切正常),然后调用 onFailureListener 监听器,并出现以下错误:

    W/System.err: com.google.android.gms.common.api.ApiException: 13: 监听器已经取消注册

  • 似乎监听器在第二个请求之前没有得到第一个回调(它是否堆积在某个堆栈上?),并且它调用(正确?)错误监听器来告诉监听器已经取消注册......

    奇怪... 或不?

    无论如何,如果尚未完成,我将提交错误报告。

    我使用 com.google.gms:google-services 的 v11.4.2 firebase、v11.4.2 play-services、v26.1.0 android.support 和 v3.1.1。

    RG

    关于java - 在 `removeLocationUpdates` 的 `FusedLocationClientProvider` 完成时接收回调的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46401266/

    10-13 03:36