android 在后台运行定位服务(即使应用程序已终止),并在设备位置更改时重新启动

szqfcxe2  于 2023-01-24  发布在  Android
关注(0)|答案(1)|浏览(132)

如何在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米或更大,则重新启动服务。但是,我不确定这是否会在应用程序被完全杀死的情况下工作,并需要指导如何正确地实现这个解决方案或任何其他解决方案,你在脑海中创建一个“防杀死”的位置跟踪服务。

dfddblmv

dfddblmv1#

我已经实现了演示项目,以获得位置在后台,即使应用程序被杀死使用Kotlin协程。这正是你正在寻找的,但它可能会帮助你很多。你可以从我的github repo

相关问题