【发布时间】:2017-03-06 07:48:55
【问题描述】:
由于我们的应用程序的工作方式,我需要同步获取用户的当前位置。我们当前的实现使用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();
我想避免等待第一个位置更新事件的可能性,因为我不知道它会在多长时间内触发,并且我可能不得不让我的用户在加载屏幕中停留很长时间,进而失去他们,因为没有人喜欢等待。
【问题讨论】:
-
如果获取设备位置需要例如5秒,需要5秒。没有办法解决这个问题。如果您同步接收它,那么您的应用程序(或该特定线程)会卡住 5 秒钟。如果您异步接收它,您可以使用这 5 秒做其他事情。使操作同步并不能解决您的问题。 'getLastLocation()' 可能很容易在开发人员的测试手机上返回 'null',而没有其他应用程序请求该位置。在真正的用户手机上运行 Facebook、Google Now 等可能会更好,但我们当然不能依赖它。
-
"...我们已经在服务器端保存了用户最后一个已知位置,因此检索最后一个已知位置并将其发送到服务器是多余的。" ...除非自从应用程序上次运行以来位置实际发生了变化。那么就不是多余的了。
-
据我了解,只要有应用程序使用,定位服务只会返回最后一个已知位置。一旦所有应用程序与服务断开连接,它将再次返回 null,这不是不可能的情况。我不想依赖像那样不可靠的东西
标签: android gps android-gps android-fusedlocation