我正在制作一个待办事项列表应用程序,用户需要添加一个任务以及日期和时间,稍后再使用该日期和时间来触发通知,当应用程序处于前台时,它可以正常工作,但是由于服务是在android之后提交给限制的奥利奥,现在我迷失了当应用程序在后台或被杀死时如何触发通知的方法,如果你们能启发我,我将不胜感激
class NotificationService(var context: FragmentActivity) : Service(){
private lateinit var remindersViewModel: remindersViewModel
private lateinit var compat : NotificationManagerCompat
override fun onCreate() {
super.onCreate()
compat = NotificationManagerCompat.from(this)
remindersViewModel = ViewModelProvider(context)[remindersViewModel::class.java]
}
override fun onBind(intent: Intent?): IBinder? {
return null
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
isNotificationEnabled()
return START_NOT_STICKY
}
override fun onDestroy() {
super.onDestroy()
}
private fun isNotificationEnabled(){
//TODO : NOTIFICATION
val notificationPrefs = getSharedPreferences("notificationPrefs", Context.MODE_PRIVATE)
val isNotificationEnabled = notificationPrefs.getBoolean("notification", false)
remindersViewModel.getAllTasks().observe(context, Observer {
if(isNotificationEnabled){
CoroutineScope(Dispatchers.Main).launch {
delay(3000)
HandleOperations.taskNotification(it, context, compat)
}
}
})
}
}
答案 0 :(得分:0)
从Android Oreo开始,如果前台服务不可见,则所有后台服务都将被杀死。最好的解决方案是使用Job Scheduler(here)。
对于及时的基于事件的任务,Job Sceduler是唯一的选择,尽管它在支持库中不再可用。
对于带有Oreo及更高版本的设备,您还将需要一个通知频道。