feat: add HeartbeatScheduler with WorkManager

This commit is contained in:
fiatcode 2026-04-30 11:05:07 +07:00
parent c035181d8d
commit 5cdbb2be08
No known key found for this signature in database

View file

@ -0,0 +1,53 @@
package com.traccar.traccar_client.location
import android.content.Context
import androidx.work.Constraints
import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.NetworkType
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
import androidx.work.Worker
import androidx.work.WorkerParameters
import java.util.concurrent.TimeUnit
class HeartbeatScheduler(private val context: Context) {
private val workManager = WorkManager.getInstance(context)
fun scheduleHeartbeat(intervalSeconds: Long, onHeartbeat: () -> Unit) {
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.NOT_REQUIRED)
.build()
val heartbeatRequest = PeriodicWorkRequestBuilder<HeartbeatWorker>(
intervalSeconds, TimeUnit.SECONDS
)
.setConstraints(constraints)
.addTag(HEARTBEAT_WORK_TAG)
.build()
workManager.enqueueUniquePeriodicWork(
HEARTBEAT_WORK_NAME,
ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE,
heartbeatRequest
)
}
fun cancelHeartbeat() {
workManager.cancelUniqueWork(HEARTBEAT_WORK_NAME)
}
class HeartbeatWorker(
context: Context,
params: WorkerParameters
) : Worker(context, params) {
override fun doWork(): Result {
return Result.success()
}
}
companion object {
const val HEARTBEAT_WORK_TAG = "traccar_heartbeat"
const val HEARTBEAT_WORK_NAME = "traccar_heartbeat_work"
}
}