android - Kotlin - 事件前的 WorkManager 通知
问题描述
如何创建将在活动开始日期前几天发送的通知?
开始日期是使用日期范围选择器创建的,我需要收到一条通知,提醒我在 3 天内我有事要做。
解决方案
假设您的问题主要是在特定时间触发通知,我认为这样的事情会做:
- 使用 AlarmManager 设置警报
- 配置一个 BroadcastReceiver 来处理告警
下面的代码是我如何为每日通知(可以打开和关闭)实现它的一些修改版本。我使用自定义处理程序来发送消息,这导致处理消息以创建通知。实际通知的基础知识在代码中,但您需要一些努力来配置它。如果您需要更多详细信息,请告诉我。
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() }
}
}
推荐阅读
- python-3.x - 我正在尝试清理我的数据,但它返回了错误的列
- node.js - 在adonis中反序列化json
- javascript - 用动画折叠 SectionList 部分
- excel - Excel IF 函数,True、False 或空白
- c# - MS SQL 中 nvarchar(max) 和 nvarchar(4000) 之间的 unicode 结果不同
- java - 通过java代码在jenkins中文件上传不起作用
- c# - C# WinForm:从 BackgroundWorker_ProgressChanged 事件调用时,contextMenuStrip 在 .Show() 方法之后抛出 InvalidOperationException
- spring - 云环境中Spring集成的JMS消息处理
- laravel - 错误:在 Laravel config\azure-oath 中找不到类“请求”
- linux - grep 反向精确匹配