在Google Map中追踪用户时持续报错,代码与教程一致仍出问题
谷歌地图位置追踪代码报错排查
每次尝试在谷歌地图中追踪用户时都会遇到错误,我按照教程编写了用于Google Map位置更新的代码,但持续出现错误,请求帮助排查问题原因。
相关代码如下:
private fun startLocationUpdates() { fusedLocationClient.*requestLocationUpdates*( locationRequest, locationCallback, null ) } private fun getLocationUpdates() { locationRequest = *LocationRequest()* locationRequest.*interval* = 30000 locationRequest.*fastestInterval* = 20000 locationRequest.*priority* = LocationRequest.QUALITY_HIGH_ACCURACY locationCallback = object : LocationCallback(){ override fun onLocationResult(locationResult: LocationResult) { if (locationResult.locations.isNotEmpty()){ val location = locationResult.lastLocation if (location != null){ val latLng = LatLng(location.longitude, location.longitude) val markerOptions = MarkerOptions().position(latLng) mMap.addMarker(markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker))) mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15f)) } } } } }
可能的问题排查点:
- 坐标赋值错误:代码中
LatLng(location.longitude, location.longitude)重复使用了经度,正确写法应为LatLng(location.latitude, location.longitude),错误的坐标会导致地图定位完全偏离。 - 权限缺失:需在
AndroidManifest.xml中声明ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION权限,并且在运行时动态申请。没有权限的话,fusedLocationClient无法获取用户位置。 - 变量作用域问题:确认
locationRequest和locationCallback是类成员变量,而非局部变量。如果是局部变量,可能会被GC回收,导致位置更新中断。 - Google Play服务版本兼容:检查设备上的Google Play服务是否为最新版本,旧版本可能与当前Location API不兼容。
- Marker重复添加:每次位置更新都会新增Marker,建议维护一个全局Marker对象,更新位置时直接修改其坐标,避免地图上堆积大量Marker。
- 位置数据处理不严谨:
locationResult.lastLocation可能为空,建议直接遍历locationResult.locations集合,取最新的有效位置数据。
内容的提问来源于stack exchange,提问作者Ghulam Abbas
相关产品推荐
相关产品推荐

