Если вам нужно показать его один раз, то с Alarm (AlarmManager.setExact) все в порядке, если вам нужно всегда показывать уведомление после 3-дневной задержки - тогда JobScheduler
будет соответствовать вашим потребностям.
Если вы решил использовать JobScheduler
API, вот фрагмент
ваш Application.onCreate
if (!applicationContext.getSharedPreferences("event", Context.MODE_PRIVATE).getBoolean("isSet", false)){
val jobScheduler = getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
jobScheduler.schedule(
JobInfo
.Builder(1, ComponentName(this, JobServiceImpl::class.java))
.setMinimumLatency(TimeUnit.DAYS.toMillis(3))
.setBackoffCriteria(TimeUnit.HOURS.toMillis(1), JobInfo.BACKOFF_POLICY_LINEAR)
.build()
)
applicationContext.getSharedPreferences("event", Context.MODE_PRIVATE).getBoolean("isSet", true)
}
JobServiceImpl
class JobServiceImpl : JobService() {
override fun onStopJob(params: JobParameters?): Boolean {
return true
}
override fun onStartJob(params: JobParameters?): Boolean {
//show your notification here
jobScheduler.schedule(
JobInfo
.Builder(1, ComponentName(this, JobServiceImpl::class.java))
.setMinimumLatency(TimeUnit.Minutes.toMillis(1))
.setBackoffCriteria(TimeUnit.Minutes.toMillis(1), JobInfo.BACKOFF_POLICY_LINEAR)
.build()
)
}
}
не забудьте обновить манифест
<service
android:name=".JobServiceImpl"
android:permission="android.permission.BIND_JOB_SERVICE" />