getLastKnownLocation() 与 requestLocationUpdates()
getLastKnownLocation() vs requestLocationUpdates()
我很惊讶并想请您原谅,但无法找到两者之间根本区别的明确答案。所以,这是我的要求:
我想每隔 5 分钟捕获一次用户的位置。对于一般的调度,我使用 JobScheduler 并在后台完成所有工作。所以,我正在使用每 5 分钟安排一次的工作来完成上述任务。
如何完成?
- 目前,我正在使用
LocationManager.getLastKnownLocation()
与不同的提供商(GPS、网络)进行修复
我一直在研究,似乎有更好的选择来获得修复 - 使用 PendingIntent
使用 requestLocationUpdates()
获取位置更新。
那么,问题来了:
据记载,如果我 getLastKnownLocation()
return 设置我的当前位置,然后我关闭我的设备并行驶 30 英里并重新打开它(当然要打开 GPS),getLastKnownLocation()
会 return 我到 30 英里以前的位置。
但是,我对 return 由 requestLocationUpdates()
编辑的位置感到困惑。它会 return 新位置吗?
getLastKnownLocation 将 return 仅当位置已经打开时才会获取位置。它会立即return。 99% 的时间它将 return 为空。它不会打开位置硬件或软件。它可以用作优化,但不应该依赖它。除非您确定自己在做什么,否则您应该忘记此功能的存在。
requestLocationUpdates 将 return 立即不执行任何操作,并且 return 回调中的位置。它永远不会 return null。它将打开定位硬件和软件,并在位置发生变化时向您发送更新。如果由于某种原因它无法获得位置修复(飞行模式,在隧道中并且无法到达 gps 卫星等),它可能永远不会调用回调。只要您需要不断获取位置更新,就应该使用它。
requestSingleUpdate 与requestLocationUpdates 类似,只不过它只会调用一次回调,然后再次关闭位置跟踪。当您现在只需要位置而不关心更新时,应该使用它。
我很惊讶并想请您原谅,但无法找到两者之间根本区别的明确答案。所以,这是我的要求:
我想每隔 5 分钟捕获一次用户的位置。对于一般的调度,我使用 JobScheduler 并在后台完成所有工作。所以,我正在使用每 5 分钟安排一次的工作来完成上述任务。
如何完成?
- 目前,我正在使用
LocationManager.getLastKnownLocation()
与不同的提供商(GPS、网络)进行修复
我一直在研究,似乎有更好的选择来获得修复 - 使用 PendingIntent
使用 requestLocationUpdates()
获取位置更新。
那么,问题来了:
据记载,如果我 getLastKnownLocation()
return 设置我的当前位置,然后我关闭我的设备并行驶 30 英里并重新打开它(当然要打开 GPS),getLastKnownLocation()
会 return 我到 30 英里以前的位置。
但是,我对 return 由 requestLocationUpdates()
编辑的位置感到困惑。它会 return 新位置吗?
getLastKnownLocation 将 return 仅当位置已经打开时才会获取位置。它会立即return。 99% 的时间它将 return 为空。它不会打开位置硬件或软件。它可以用作优化,但不应该依赖它。除非您确定自己在做什么,否则您应该忘记此功能的存在。
requestLocationUpdates 将 return 立即不执行任何操作,并且 return 回调中的位置。它永远不会 return null。它将打开定位硬件和软件,并在位置发生变化时向您发送更新。如果由于某种原因它无法获得位置修复(飞行模式,在隧道中并且无法到达 gps 卫星等),它可能永远不会调用回调。只要您需要不断获取位置更新,就应该使用它。
requestSingleUpdate 与requestLocationUpdates 类似,只不过它只会调用一次回调,然后再次关闭位置跟踪。当您现在只需要位置而不关心更新时,应该使用它。