FusedLocationProviderClient RemoveLocationUpdatesAsync任务未完成

问题描述 投票:1回答:2

我正在实施Xamarin Android Location跟踪器,并添加了以下代码来停止位置更新。

    public Task StopAsync()
    {
        if(IsTracking)
        {
            IsTracking = false;
            perviousStopTask = fusedLocationProviderClient.RemoveLocationUpdatesAsync(this);
        }

        return perviousStopTask;
    }

上面的方法,我将任务返回从RemoveLocationUpdatesAsync方法分配给perviousStopTask并从StopAsync方法返回它。但是,当我试图等待这个StopAsync方法时,它没有完成。

android xamarin xamarin.android task fusedlocationproviderclient
2个回答
1
投票

Xamarin LocationSample project将此问题归咎于Google Play服务。调用RemoveLocationUpdatesAsync时,样本当前不会使用等待。

TODO:我们应该等待这个电话,但Google Play服务中似乎有一个错误,第一次调用removeLocationUpdates,返回的Android.Gms.Tasks.Task永远不会真正完成,即使位置更新似乎已被删除并停止发生。现在我们只是解雇并忘记解决方法。


0
投票

我不确定Fused Location Provider是否是线程安全的。但是,您可以尝试以下某些操作。

  1. nullIsTracking时,似乎你正在返回一个完整的或false,所以我会将方法更改为: public Task StopAsync() { if (IsTracking) { IsTracking = false; return fusedLocationProviderClient.RemoveLocationUpdatesAsync(this); } return Task.CompletedTask; }
  2. 如果你真的不想回到你调用方法的上下文,请确保你调用.ConfigureAwait(false)await StopAsync().ConfigureAwait(false);
© www.soinside.com 2019 - 2024. All rights reserved.