你能帮我一下吗?我的任务是制作一个 GPS 跟踪器,将 GPS 数据传递到 Firebase。但关键是跟踪器应具有以下灵敏度 - 60 米(测试构建为 10 米),每 10 分钟周期一次(测试构建为 5 秒)。
据我了解,只有当您经过 60 米时,它才应该每 10 分钟跟踪一次。因此,如果我超过 40 米,它就不应该跟踪它。
在用例中,我编写了以下带有间隔、最小位移的方法,但它没有按我的预期工作。你能帮我解决一下吗?
@SuppressLint("MissingPermission")
fun saveLocation() {
val locationRequest = LocationRequest().apply {
interval = com.example.gpstracker.BuildConfig.TRACKING_INTERVAL_MILLIS
fastestInterval = com.example.gpstracker.BuildConfig.TRACKING_INTERVAL_MILLIS
smallestDisplacement = com.example.gpstracker.BuildConfig.TRACKING_INTERVAL_METERS.toFloat()
}
val locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
locationResult.locations.let { locations ->
val location = locations.last()
saveLocationToFirebase(location.latitude, location.longitude)
}
}
}
fusedLocationClient.requestLocationUpdates(
locationRequest,
locationCallback,
Looper.myLooper()
)
}
您设置的两个参数都是最小值,因此当超过最短时间或最短距离时,您将得到一个locationCallBack。
我建议你只设置最短时间,每10分钟你会得到一个locationCallBack,你可以自己处理距离阈值。
计算当前位置与上次位置之间的距离 (在 Kotlin 中我会使用 distance = lastLocation.distanceTo(location) ) 如果它大于你的阈值那么 处理它 设置上次位置 = 下次使用此位置 (在 Kotlin 中,这将是 lastLocation.set(location) ) 别的 什么都不做