我想在午夜通知我不使用Firebase。我尝试了很多示例,从alarmmanager,jobdispatcher到workmanager。我意识到自己的局限性。当它处于前台和后台时,通知效果很好。但是,如果我通过单击全部关闭按钮杀死了该应用程序,则调度程序将无法正常工作。请救救我的命...我太生气了。这是我的工作经理示例。
GlobalApplication
open class GlobalApplication : Application() {
override fun onCreate() {
super.onCreate()
instance = this
var worker = OneTimeWorkRequestBuilder<MyPeriodWorker>()
.setInitialDelay(1000, TimeUnit.MILLISECONDS).build()
WorkManager.getInstance(this).enqueue(worker)
}
companion object {
private var instance: GlobalApplication? = null
val globalApplicationContext: GlobalApplication
get() {
checkNotNull(instance) {}
return instance!!
}
}
}
MainActivity
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: BlurViewModel
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
//var worker = PeriodicWorkRequestBuilder<NotificationWorker>(15,TimeUnit.MINUTES).setInitialDelay(1000,TimeUnit.MILLISECONDS).build()
var worker = OneTimeWorkRequestBuilder<MyPeriodWorker>()
.setInitialDelay(1000,TimeUnit.MILLISECONDS).build()
WorkManager.getInstance(this).enqueue(worker)
}
}
MyOneTimeWorker
class MyOneTimeWorker(context: Context, params:WorkerParameters):Worker(context,params) {
override fun doWork(): Result {
val appContext = applicationContext
return try{
makeStatusNotification("WorkManager Alarm",appContext)
Result.success()
}
catch (e:Exception){
Result.failure()
}
}
}
MyPeriodWorker
class MyPeriodWorker(context: Context, params:WorkerParameters): Worker(context,params) {
override fun doWork(): Result {
return try{
val dailyWorkRequeset = OneTimeWorkRequestBuilder<MyPeriodWorker>()
.setInitialDelay(5000, TimeUnit.MILLISECONDS)
.addTag("notify_day_by_day")
.build()
makeStatusNotification("WorkManager Alarm",applicationContext)
WorkManager.getInstance(applicationContext).enqueue(dailyWorkRequeset)
Result.success()
}
catch (e:Exception){
Result.failure()
}
}
}