我写了一个“Codenameone应用”,需要在某些情况下制定位置测量,并且需要立即(当时)阅读。
为了实现这个目标,我在Display对象中使用方法“getLocationSync(long timeout = 10000)”。代码是这样的:
Location loc = LocationManager
.getLocationManager()
.getCurrentLocationSync(10000);
此方法的JavaDoc表示它会立即执行一项措施并建议: “请注意,他的方法将阻塞,直到返回结果,因此您可能希望在运行时使用InfiniteProgress之类的东西”
正如您所看到的,我用10秒的时间调用该方法进行超时。
嗯,实际上,我得到一个Location对象作为响应,但返回的度量不是一个立即的度量(当时)。这种方法会在一段时间内(大约4或5分钟)重复相同的结果,即使我在这4分钟内显着改变手机位置。
我注意到的另一件事是,大多数时候我称之为“getCurrentLocationSync”的“InfiniteProgress”没有出现。电话快速返回。
我做错了吗? 根据需要,我需要做些什么才能真正衡量位置?
答案 0 :(得分:0)
getCurrentLocationSync
等待存在的位置与纯GPS模式更相关,但在现代混合位置API(例如在iOS / Android中实现的那些)中不相关。
默认情况下iOS和Android都使用混合位置API,这意味着该设备将使用wifi,手机数据和GPS的组合,为您提供更准确和即时的位置。即使使用GPS也知道确切的设备位置是有问题的,因为位置在相对较大的误差范围内,并且只有在设备开始移动时才能更准确地计算。