【问题标题】:Kotlin - WorkManager notification before an eventKotlin - 事件前的 WorkManager 通知
【发布时间】:2021-11-05 02:12:14
【问题描述】:

如何创建将在活动开始日期前几天发送的通知?

开始日期是使用日期范围选择器创建的,我需要收到通知,提醒我在 3 天内我有事要做。

【问题讨论】:

  • 您想安排在给定日期运行的工作请求,对吧?
  • 是的,给定日期基于客户在日期范围选择器上选择的开始日期。
  • 我想在所选客户日期前 3 天收到提醒通知。

标签: android kotlin android-workmanager


【解决方案1】:

假设您的问题主要是在特定时间触发通知,我认为这样的事情会做:

  • 使用 AlarmManager 设置警报
  • 配置广播接收器来处理警报

下面的代码是我如何为每日通知(可以打开和关闭)实现它的一些修改版本。我使用自定义处理程序发送消息,这导致处理消息以创建通知。实际通知的基础知识在代码中,但您需要一些努力来配置它。如果您需要更多详细信息,请告诉我。

class EventNotificationManager(ctx: Context) {

    private val context: WeakReference<Context> = WeakReference(ctx.applicationContext)
    private val flags = FLAG_UPDATE_CURRENT.let { if (SDK_INT < M) it else it or FLAG_IMMUTABLE }
    private val alarmIntent =
        getBroadcast(ctx, 1486, Intent(ctx, EventWakeUpJob::class.java), flags)

    private fun getContext() = context.get() ?: AppName.app.applicationContext

    fun startTask() {
        val ctx = getContext()
        val alarmManager = ctx.getSystemService(Context.ALARM_SERVICE) as? AlarmManager ?: return

        if (!isEventAlertingActive()) {
            alarmManager.cancel(alarmIntent)
        } else {
            var alertIt = customPickedDate.minDays(3)
            // Make sure it is at least after now
            alarmManager.setExact(RTC, alertIt.millis, alarmIntent)
        }
    }

    fun alertEvents() {
        // This is only the basics. Please see other examples for this.
        // Custom handler which does sendMessage + handleMessage
        // In handleMessage (SDK_INT >= O): 
        // NotificationManager.createNotificationChannel
        // msg = Notification.Builder(ctx, yourChannelId).apply { ... }.build()
        // NotificationManager.notify(customMessageId, msg)
    }
}

class EventWakeUpJob : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        context?.let { EventNotificationManager(it).alertEvents() }
    }
}

【讨论】:

  • 您好,非常感谢您的帮助,但我可以私下找到您吗?这很紧急,我很绝望。
  • StackOverflow 的概念是分享。我很乐意通过这个渠道提供帮助。请联系您的案例的专业支持,否则我无法为您提供帮助。
  • 我可以在这里写完整的问题吗?
  • 如果“完整问题”是另一个问题,请将其标记为已完成并创建一个新问题(您可以在此处在评论中创建链接)。否则,请编辑当前问题以澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多