如何在Android中创建一个在后台运行的位置跟踪服务,即使应用程序已完全关闭?该服务应在设备位置变化100米时启动,并应在设备静止时停止。此外,我需要的服务是尽可能电池效率。我曾尝试使用前台服务与活动识别API的组合,但它似乎不工作时,应用程序被完全杀死。有人能指导我如何在Android中实现这一任务吗?
下面是我的基本位置服务,它可以在后台更新位置:
class LocationService : Service() {
private val locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult?) {
locationResult ?: return
for (location in locationResult.locations) {
// do something with the location here
}
}
}
override fun onCreate() {
val locationRequest = LocationRequest().apply {
interval = 10000
fastestInterval = 5000
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
val client = LocationServices.getFusedLocationProviderClient(this)
val locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult?) {
locationResult ?: return
for (location in locationResult.locations) {
// do something with the location here
}
}
}
client.requestLocationUpdates(locationRequest, locationCallback, null)
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
return START_STICKY
}}
一种可能的解决方案是将Transition API与广播接收器结合使用。Transition API可以侦听活动的变化,例如设备何时开始移动,并在后台启动服务。此外,我们可以使用广播接收器侦听位置更新,如果设备的位置变化100米或更大,则重新启动服务。但是,我不确定这是否会在应用程序被完全杀死的情况下工作,并需要指导如何正确地实现这个解决方案或任何其他解决方案,你在脑海中创建一个“防杀死”的位置跟踪服务。
1条答案
按热度按时间dfddblmv1#
我已经实现了演示项目,以获得位置在后台,即使应用程序被杀死使用Kotlin协程。这正是你正在寻找的,但它可能会帮助你很多。你可以从我的github repo