由于我们的应用程序的工作方式,我需要同步获取用户的当前位置。我们当前的实现使用com.google.android.gms.location.LocationListener
来接收位置更新。问题是,我需要在尝试第一次呼叫之前更新位置服务器端,否则用户会收到错误的数据。
LocationServices.FusedLocationApi.getLastLocation()
不适合这个,因为a)它似乎总是返回null(无论出于何种原因)和b)我们已经保存用户最后已知的位置服务器端,因此检索最后的已知位置并将其发送到服务器是多余的。
伪代码
//this is the first call I need to make
webservice.appStart(AppStartBody body);
//then I want to retrieve the current location and send it to the server
webservice.setGeoLocation(getCurrentLocation());
//finally, I retrieve the items on the server based on the location
webservice.getListItems();
等待第一个位置更新事件是我想要避免的可能性,因为我不知道,它会在多长时间内触发,我可能不得不让我的用户长时间处于加载屏幕中并反过来丢失它们,因为没有人喜欢等待。
答案 0 :(得分:0)
我能够通过在Rx observable中检索位置的过程来解决这个问题,特别是asp-items
。调用Single
对象的Single
方法以同步检索位置。然后将其放置在try catch块内以执行重试,因为在第一次尝试期间位置并不总是可用。
(我知道这是一个老问题,但无论如何我都会发布一个答案,以便我可以分享我的方式。抱歉使用Kotlin和RxJava!但我认为每个人都会得到我的要点想法并能够以他们喜欢的方式实现它。我也在使用最新的Google Location API。)
blockingGet