我需要确保我使用的位置是新的:
有没有办法找出LocationServices.FusedLocationApi.getLastLocation
返回的位置结果的年龄?
如果不是:如果我向LocationServices.FusedLocationApi.requestLocationUpdates
(setNumUpdates(1)
和setMaxWaitTime(0)
)注册了位置监听器,那么如果位置没有从{LocationServices.FusedLocationApi.getLastLocation
返回的位置发生变化,它会更新吗? 1}}?
答案 0 :(得分:4)
是的,有一种非常简单的方法。您可以通过这样调用getTime()
来获取地理位置修复的时间:
Location currentLocation = LocationServices.FusedLocationApi.getLastLocation(apiClient);
long locationAge = System.currentTimeMillis() - currentLocation.getTime();
if (locationAge <= 60 * 1000) { // not older than 60 seconds
// do something with the location
}
文档建议不要使用System.currentTimeMillis()进行时间比较,但我从来没有遇到过这种方法的任何缺陷。但是,您应该考虑阅读(简短)文档:
https://developer.android.com/reference/android/location/Location.html#getTime()
答案 1 :(得分:0)
为了扩展Illiminat的答案,从API 17开始,添加了getElapsedRealtimeNanos()
方法。从方法的文档中...
返回自系统启动以来经过的实时修复时间。
可以将该值可靠地与SystemClock.elapsedRealtimeNanos()进行比较,以计算修订的期限并比较“位置”修订。这是可靠的,因为保证每次系统启动时经过的实时性都是单调的,并且即使系统处于深度睡眠状态也一样会持续递增(与getTime()不同)。
https://developer.android.com/reference/android/location/Location.html#getElapsedRealtimeNanos()
因此,以下内容现在应该是计算此值的最精确方法
Location currentLocation = LocationServices.FusedLocationApi.getLastLocation(apiClient);
long locationAge = SystemClock.elapsedRealtimeNanos() - currentLocation.getElapsedRealtimeNanos();
if (locationAge <= 60 * 1000) { // not older than 60 seconds
// do something with the location
}