feat: add HeartbeatScheduler with WorkManager
This commit is contained in:
parent
c035181d8d
commit
5cdbb2be08
1 changed files with 53 additions and 0 deletions
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue