当应用程序在后台/被终止时从服务触发通知

时间:2020-10-18 20:18:14

标签: android kotlin service notifications

我正在制作一个待办事项列表应用程序,用户需要添加一个任务以及日期和时间,稍后再使用该日期和时间来触发通知,当应用程序处于前台时,它可以正常工作,但是由于服务是在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)
                     }
             }
         })


    }
}

1 个答案:

答案 0 :(得分:0)

从Android Oreo开始,如果前台服务不可见,则所有后台服务都将被杀死。最好的解决方案是使用Job Scheduler(here)。

对于及时的基于事件的任务,Job Sceduler是唯一的选择,尽管它在支持库中不再可用。

对于带有Oreo及更高版本的设备,您还将需要一个通知频道。