As @dave mentioned you can use WorkManager.
here is sample for using that:
Create a Worker like this:
class AccountingPushWorker(context: Context, parameter: WorkerParameters) : Worker(context, parameter) {
override fun doWork(): Result {
//Do your work here
return Result.success()
}
}
And this is how to set time for running that worker:
val calendar = Calendar.getInstance()
calendar.timeInMillis = System.currentTimeMillis()
calendar.set(Calendar.HOUR, 12)
calendar.set(Calendar.MINUTE, 30)
if (calendar.before(Calendar.getInstance())) {
calendar.add(Calendar.DATE, 1)
}
var whenTime = calendar.timeInMillis - System.currentTimeMillis()
whenTime = kotlin.math.abs(whenTime)
val oneTimeWorkRequest: OneTimeWorkRequest = OneTimeWorkRequestBuilder<AccountingPushWorker>()
.setInitialDelay(whenTime, TimeUnit.MILLISECONDS).build()
WorkManager.getInstance(activity!!).enqueueUniqueWork("one_time_work_request", ExistingWorkPolicy.KEEP, oneTimeWorkRequest)
val periodicWorkRequest: PeriodicWorkRequest = PeriodicWorkRequestBuilder<AccountingPushWorker>(24, TimeUnit.HOURS).build()
WorkManager.getInstance(activity!!).enqueueUniquePeriodicWork("periodic_work_request", ExistingPeriodicWorkPolicy.KEEP, periodicWorkRequest)