getLastKnownLocation()vs requestLocationUpdates()

pul*_*ion 0 android location

我很惊讶,想请您原谅,但找不到关于两者之间根本区别的明确答案。因此,这是我的要求:

我想每隔5分钟捕获一次用户的位置。对于一般的调度,我使用JobScheduler并在后台执行所有工作。因此,我正在使用每5分钟安排一次的作业来完成上述任务。

我该如何完成?

我一直在研究,似乎有一个更好的选择来进行修复-使用a PendingIntent获取位置更新requestLocationUpdates()

因此,这是问题所在:

据记录,如果我getLastKnownLocation()返回当前位置,然后关闭设备并行驶30英里然后再打开(当然,请启用GPS),getLastKnownLocation()那么我将返回30英里的旧位置。

但是,我对所返回的位置感到困惑requestLocationUpdates()。它将返回新位置吗?

Gab*_*han 5

仅当位置已打开时,getLastKnownLocation才会返回位置。它将立即返回。99%的时间它将返回null。它不会打开位置硬件或软件。可以将其用作优化,但绝不能依赖它。除非您确定自己在做什么,否则应该忘记此功能的存在。

requestLocationUpdates将立即不返回任何内容,并在回调中返回一个位置。它永远不会返回null。它将打开位置硬件和软件,并在位置更改时向您发送更新。如果由于某种原因它无法获得定位信息(飞机模式,在隧道中并且无法到达卫星以获取GPS等),它可能永远不会调用回调。每当您需要继续获取位置更新时,都应使用它。

requestSingleUpdate与requestLocationUpdates一样,只是它只会调用一次回调,然后再次关闭位置跟踪。当您只想现在就位置并且不关心更新时,应该使用它。