在前台服务中使用 onLocationChanged() 更新



我正在尝试创建一个前台服务,该服务可以使用手机的GPS跟踪用户的位置。我有一个ForegroundService类,在onCreate()方法中,我调用了一个函数,该函数应该从请求位置更新开始:

fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)
locationManager = getSystemService(LOCATION_SERVICE) as LocationManager
val locationListener: LocationListener = this
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 2000, 0F, locationListener
)

我的类正在实现Service()LocationListener。然后我覆盖onLocationChanged,我应该记录当前速度(并将onAccuracyChanged留空)。

当然,我在 android 中正确显示了通知,因此该服务肯定正在运行,但无论如何我似乎都没有获得任何位置更新。问题可能是什么?谢谢。

您没有共享太多代码,因此我将分享一些猜测作为答案建议:

  1. 位置 API 选择:

您正在创建一个FusedLocationProviderClient,但不使用它。根据此文档和此SO帖子,由于准确性和电池使用量,最好使用此提供商而不是LocationManager。尝试使用FusedLocationProviderClient中的requestLocationUpdates。此处为其他示例。


  1. 侦听器定义:

根据这段代码:

locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 2000, 0F, locationListener
)

您正在尝试使用此方法的重载,然后使用定义该方法的线程的Looper。如果侦听器不是在服务中创建的,则它可能使用无法从服务线程访问的Looper


确保您onStartCommand中呼叫startForeground(id, notification),并且服务保持活动状态(示例)。

另请查看此存储库,了解在前台服务中访问的位置服务的示例。通读这篇文章以获取更多参考。

相关内容

  • 没有找到相关文章

最新更新