Как запланировать уведомление, когда 3-дневная пробная версия закончилась в моем приложении? - PullRequest
0 голосов
/ 21 февраля 2020

Я занимаюсь разработкой приложения, в котором я даю пользователю триальную версию.

Итак, все, что я хочу, - это запланировать уведомление при запуске трехдневной пробной версии и при трехдневной пробной версии. по окончании, пользователь получает уведомление о том, запущено приложение или нет.

ex:

  1. 21-02-2020 Trail запущен, затем запланируйте уведомление на дату 24-02-2002 .
  2. в день 24-02-2020 пользователи получают уведомление утром, что пробная версия окончена.

так как это сделать? и какой компонент мне нужно использовать, например, Service, Broadcast Receiver, Alarm или другой?

1 Ответ

1 голос
/ 21 февраля 2020

Если вам нужно показать его один раз, то с 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" />
...