如何设置 GPS 追踪器的灵敏度?

问题描述 投票:0回答:1

你能帮我一下吗?我的任务是制作一个 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()
    )
}

android kotlin google-maps android-gps android-fusedlocation
1个回答
0
投票

您设置的两个参数都是最小值,因此当超过最短时间或最短距离时,您将得到一个locationCallBack。

我建议你只设置最短时间,每10分钟你会得到一个locationCallBack,你可以自己处理距离阈值。

计算当前位置与上次位置之间的距离 (在 Kotlin 中我会使用 distance = lastLocation.distanceTo(location) ) 如果它大于你的阈值那么 处理它 设置上次位置 = 下次使用此位置 (在 Kotlin 中,这将是 lastLocation.set(location) ) 别的 什么都不做

© www.soinside.com 2019 - 2024. All rights reserved.