在后台向服务器发送位置更新



即使在应用程序终止后,保持用户位置与服务器同步的最佳方法是什么?这是我目前发现的

  1. 使用前台服务。我已经测试过了,但它很耗电,有时当你锁上手机或关闭屏幕时,它会被杀死
  2. 使用工作管理器。我也测试过它,它每15分钟发送一次位置,但非常不可靠,过了一段时间就停止发送了
  3. 地理围栏。我读到Geofencing api每隔几分钟左右就会更新一次位置,但我还没有测试过
  4. LocationListener。有一个方法叫onLocationChanged,但我不知道它在后台是如何工作的

是否有类似广播接收器的东西只有在位置发生一定变化时才会启动?我认为这将是一个优化的解决方案。我正在开发一款应用程序,它使用类似于facebook附近朋友的功能(很久以前就停止工作了(或类似于tinder的功能来显示附近的人。目前我需要这个为android,但我也需要它为IOS,我正在开发一个颤振应用程序。

我已经在我的应用程序中使用了一个类似的方法,它正在运行:

我使用前台服务来记录位置,电池消耗与位置请求的频率有关,而不是前台服务本身。事实上,使用LocationListener是一个不错的选择

然后我使用workmanager定期检查前台服务,并在需要时重新启动它。

最佳

正如上面评论中所讨论的,我真的不认为Android允许你在后台获取位置更新,即使应用程序不活动。

相反,我建议你在应用程序启动后立即尝试查询位置,并快速跟进你需要对其进行的任何操作。作为一种选择,你还可以通过在他们与应用程序交互时缓存他们的位置来跟踪位置历史记录,以防你想保持数据库尽可能新鲜。

这里有一些伪代码作为一个简单的例子:

class MainActivity : AppCompatActivity() {
override fun onCreate(..) {
queryForLocation(..)?.let {
doSomething(it)
cacheLocation(it)
} ?: Log.d(TAG, "Location = null")
}
override fun onDestroy() {
queryForLocation(..)?.let {
cacheLocation(it)
} ?: Log.d(TAG, "Location = null")
}

最新更新