速度甚至可以跳到70公里/小时,我以前从未有过这样的跳。 我认为这与接收不良有关,但另一个应用程序仍然运行良好,也许他们过滤掉了错误的数据,或者他们使用不同的方式来获取位置? 这是我在前台服务中使用的代码:
override fun onCreate() {
super.onCreate()
mHandlerThread.start()
mBroadcastManager = LocalBroadcastManager.getInstance(this)
createNotificationChanel()
requestLocationUpdates()
}
@SuppressLint("MissingPermission")
@Synchronized private fun requestLocationUpdates() {
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
createLocationRequest()
val locationCallback: LocationCallback?
locationCallback = object : LocationCallback() {
@Synchronized override fun onLocationResult(locationResult: LocationResult) {
val location = locationResult.lastLocation
val speedKmph = ((location?.speed?: 0f) * 3.6).roundToInt()
mSpeed = speedKmph
}
}
mFusedLocationClient.requestLocationUpdates(
mLocationRequest,
locationCallback,
mHandlerThread.looper
)
}
@Synchronized private fun createLocationRequest() {
LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 1000)
.setWaitForAccurateLocation(false)
.setMinUpdateIntervalMillis(500)
.build().also { mLocationRequest = it }
}
GPS 数据本质上是有噪声的,通常使用 卡尔曼滤波器 或类似的东西进行过滤。不同的 GPS 接收器应用不同数量的过滤,应用程序可以应用自己的附加过滤。