Android使用WorkManager实现循环定时通知

引入包
def work_version = “2.9.0”
// (Java only)
implementation “androidx.work:work-runtime:$work_version”

// Kotlin + coroutines
implementation "androidx.work:work-runtime-ktx:$work_version"// optional - RxJava2 support
implementation "androidx.work:work-rxjava2:$work_version"// optional - GCMNetworkManager support
implementation "androidx.work:work-gcm:$work_version"// optional - Test helpers
androidTestImplementation "androidx.work:work-testing:$work_version"// optional - Multiprocess support
implementation "androidx.work:work-multiprocess:$work_version"

TimedTaskWorkMenstruation`package com.oplayer.orunningplus.utils.alarmTimer

import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat
import androidx.work.*
import com.crrepa.ble.trans.upgrade.NotificationActivity
import com.oplayer.orunningplus.R
import com.oplayer.orunningplus.common.CustomizedPackName
import com.oplayer.orunningplus.manager.DeviceDataManager
import com.oplayer.orunningplus.utils.PreferencesHelper
import com.oplayer.orunningplus.utils.Slog
import com.oplayer.orunningplus.utils.UIUtils
import java.util.*
import java.util.concurrent.TimeUnit

class TimedTaskWorkMenstruation(val context: Context, workerParams: WorkerParameters) : Worker(context,
workerParams
) {
@RequiresApi(Build.VERSION_CODES.O)
override fun doWork(): Result {
try {
showNotification(context)
var periodMenstruation = DeviceDataManager.instance.getMenstruation().periodMenstruation
var remindTimeDay = 0
if (PreferencesHelper.getRemindTimeDay() == 0) {
remindTimeDay = 0
}else if (PreferencesHelper.getRemindTimeDay() == 1) {
remindTimeDay = 1
}else if (PreferencesHelper.getRemindTimeDay() == 2) {
remindTimeDay = 2
}else {
remindTimeDay = 7
}
val request = OneTimeWorkRequest
.Builder(TimedTaskWorkMenstruation::class.java)
.setInitialDelay(1000L * 60 * 60 * (periodMenstruation - remindTimeDay), TimeUnit.MILLISECONDS)
.addTag(“workMenstruationTag”)
.build()
WorkManager.getInstance().enqueue(request)
} catch (e: Exception) {
e.printStackTrace()
}
return Result.success()
}

private var manager: NotificationManager? = null
private var note: Notification? = null
private fun showNotification(context: Context) {val channelName = UIUtils.getString(R.string.app_name)val channelID = CustomizedPackName.ORunningPlusvar remindTimeDay = ""remindTimeDay = if (PreferencesHelper.getMenstrualCycleSetting() == 1) {if (PreferencesHelper.getRemindTimeDay() == 0) {UIUtils.getContext().getString(com.yalantis.ucrop.R.string.womensHealth_notificationMenstrualDate)} else if (PreferencesHelper.getRemindTimeDay() == 1) {UIUtils.getContext().getString(com.yalantis.ucrop.R.string.womensHealth_notificationMenstrual).replace("%s",UIUtils.getContext().getString(com.yalantis.ucrop.R.string.womensHealth_notificationOneDay))} else if (PreferencesHelper.getRemindTimeDay() == 2) {UIUtils.getContext().getString(com.yalantis.ucrop.R.string.womensHealth_notificationMenstrual).replace("%s",UIUtils.getContext().getString(com.yalantis.ucrop.R.string.womensHealth_notificationTwoDay))} else {UIUtils.getContext().getString(com.yalantis.ucrop.R.string.womensHealth_notificationMenstrual).replace("%s",UIUtils.getContext().getString(com.yalantis.ucrop.R.string.womensHealth_notificationOneWeek))}} else {if (PreferencesHelper.getPregnancyRemindTimeDay() == 0) {UIUtils.getContext().getString(com.yalantis.ucrop.R.string.womensHealth_notificationDueDate)} else if (PreferencesHelper.getPregnancyRemindTimeDay() == 1) {UIUtils.getContext().getString(com.yalantis.ucrop.R.string.womensHealth_notificationReminder).replace("%s",UIUtils.getContext().getString(com.yalantis.ucrop.R.string.womensHealth_notificationOneDay))} else if (PreferencesHelper.getPregnancyRemindTimeDay() == 2) {UIUtils.getContext().getString(com.yalantis.ucrop.R.string.womensHealth_notificationReminder).replace("%s",UIUtils.getContext().getString(com.yalantis.ucrop.R.string.womensHealth_notificationTwoDay))} else {UIUtils.getContext().getString(com.yalantis.ucrop.R.string.womensHealth_notificationReminder).replace("%s",UIUtils.getContext().getString(com.yalantis.ucrop.R.string.womensHealth_notificationOneWeek))}}// 创建通知manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManagerSlog.d("输出创建通知创建通知")if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {val channel = NotificationChannel(channelID, remindTimeDay,NotificationManager.IMPORTANCE_HIGH)manager!!.createNotificationChannel(channel)}val intent = Intent(context, NotificationActivity::class.java)val pending = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)note = NotificationCompat.Builder(context, channelID).setContentTitle(UIUtils.getString(com.yalantis.ucrop.R.string.settings_womensHealth)).setContentText(remindTimeDay).setSmallIcon(R.mipmap.ic_launcher) // .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.image))//  .setColor(Color.parseColor("#ff0000"))//设置小图标颜色//.setSubText()//设置内容下面一小行的文字.setContentIntent(pending) //设置点击动作.setAutoCancel(true).build()manager!!.notify(11012, note)
}

}`

引用;

        val WORK_TAG = "Breast"val request = OneTimeWorkRequest.Builder(TimedTaskWorkMenstruation::class.java).setInitialDelay(1000*60, TimeUnit.MILLISECONDS).addTag(WORK_TAG).build()WorkManager.getInstance(this).enqueue(request)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/37185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

农业新质生产力数据(2012-2022年)原始+dofile+测算数据集

数据简介:农业新质生产力是指在现代农业发展中,通过融合尖端科技、信息技术与创新管理模式,实现农业生产效率飞跃、产品质量显著提升及生产可持续性增强的一种革新性生产能力,农业新质生产力代表了从依赖传统资源转向依靠科技创新…

一加Ace3 刷机救砖简化说明

注意:工具使用英文目录,支持救砖和降级。PJE110国行版,CPH2609国际版。目前国行版不能完美转换国际版,每次升级都需要刷oplusstanvbk,不建议使用。跨国转换或ROOT一定先解锁Bootloader,可以使用“一加全能工…

【java 执行 postgresql sql 结果不一致】

java 执行 postgresql sql 结果不一致 问题描述:pk_deptdoc,deptname 这两个字段只显示第一个字符。解决方案:是因为用到了UNION ALL,为了两边查询结果一致,我们一般会定一个空值,却没有定义数据类型&#…

Linux免交互

免交互 交互:我们发出指令控制程序的运行,程序在接受到指令之后按照指令的效果做出对应的反应 免交互:间接的通过第三方的方式把指令传送给指定的程序,不用直接的下达指令 Here Document 免交互: 这是命令行格式&…

国外Essay写作需要哪些明确规划?

Essay是一项有挑战性的任务,因此需要一个明确的写作规划,以确保您的Essay有逻辑性、准确性和连贯性。以下是一些不同寻常的写作规划的建议,以帮助您编写一篇成功的Essay。 创意闪光: 一个好的Essay写作规划应该让您的创意闪光。…

CSS隐藏元素:探索不同的隐藏技巧

在网页设计中,我们经常需要隐藏某些元素,以实现特定的布局效果或响应式设计。CSS提供了多种方法来隐藏元素,每种方法都有其特定的用途和效果。今天,我们就来探索一下CSS中隐藏元素的几种常见方式。 隐藏元素的两种方式 方式一&a…

为什么用excel求出的和是错误的?

Excel中求和结果错误的原因可能有几种常见的情况:1. **数据格式问题**:有时候数字可能被错误地视为文本格式。这种情况下,Excel 在求和时会忽略这些单元格。你可以通过将这些单元格的格式改为数值格式来解决。2. **隐藏的行或列**&#xff1a…

01_基于git代码代码运行JADE的第一个Agent

第一步&#xff1a;下载JADE代码 进入官网地址 Jade (jade-project.gitlab.io) 使用git下载JADE代码 第二步&#xff1a;编译并打包代码 在代码目录下执行mvn install 注意事项 1. maven版本需大于3.2.6 第三步&#xff1a;新建一个常规maven项目 <?xml version&q…

find_in_set 查询数据库中,逗号隔开的字符串

FIND_IN_SET(str,strlist)&#xff0c;该函数的作用是查询字段(strlist) 中是否包含(str)的结果&#xff0c;返回结果为 null或记录 。 写法1&#xff1a; $where[] [exp,Db::raw("FIND_IN_SET($user_id,follow_ids)")];写法2&#xff1a; ->where("find_in…

encode()方法——编码字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 编码是将文本&#xff08;字符串&#xff09;转换成字节流&#xff0c;Unicode格式转换成其他编码格式。在Python中提供了encode()方法&am…

Kotlin 中的 infix 关键字(中缀函数)

在 Kotlin 中&#xff0c;infix 是一个关键字&#xff0c;用于定义中缀函数&#xff08;Infix Functions&#xff09;。 中缀函数允许我们在调用函数的时候使用更加简洁的中缀符号&#xff08;通常是一个操作符&#xff09;&#xff0c;而不是传统的点符号调用方式。中缀函数的…

Linux_应用篇(24) CAN 应用编程基础

本章我们学习 CAN 应用编程&#xff0c; CAN 是目前应用非常广泛的现场总线之一&#xff0c;主要应用于汽车电子和工业领域&#xff0c;尤其是汽车领域&#xff0c;汽车上大量的传感器与模块都是通过 CAN 总线连接起来的。 CAN 总线目前是自动化领域发展的热点技术之一&#xf…

2024软件测试面试题大全【含答案】

一、面试基础题 简述测试流程&#xff1a; 1、阅读相关技术文档&#xff08;如产品PRD、UI设计、产品流程图等&#xff09;。 2、参加需求评审会议。 3、根据最终确定的需求文档编写测试计划。 4、编写测试用例&#xff08;等价类划分法、边界值分析法等&#xff09;。 5…

ntp自动同步时间 ubuntu入门之二十四

当我们的电脑的CMOS电池失效时&#xff0c;我们可以在登陆shell之后通过脚本自动同步ntp时间。 Debian 11系统脚本编写如下&#xff1a; $ pwd /home/user$ ls Desktop Documents Downloads Music Pictures Public Templates Videos debian initrd mnt sync-time…

活动|华院计算受邀参加2024全球人工智能技术大会(GAITC),探讨法律大模型如何赋能社会治理

6月22至23日&#xff0c;备受瞩目的2024全球人工智能技术大会&#xff08;GAITC&#xff09;在杭州市余杭区未来科技城隆重举行。本届大会以“交叉、融合、相生、共赢”为主题&#xff0c;集“会、展、赛”为一体&#xff0c;聚“产、学、研”于一堂。值得一提的是&#xff0c;…

夏天喝酱香酒的好处有哪些?

夏天适合喝酱香酒的原因主要有促进新陈代谢、祛湿气、保护心脏等。下面酱酒亮哥将详细分析夏天适合喝酱香酒的具体原因&#xff1a; 促进新陈代谢 增加血液循环&#xff1a;夏天天气炎热&#xff0c;人体的新陈代谢本来就比冬季要旺盛&#xff0c;而酱香型白酒含有较多的酒精…

Batch 入门学习

Batch 入门学习 Batch 是一种在计算机科学和数据处理领域中广泛使用的技术&#xff0c;用于批量处理数据和任务。本文将带你深入了解 Batch 的基本概念、应用场景、工作原理和一些常用工具&#xff0c;帮助你快速入门 Batch 处理技术。 目录 Batch 概述Batch 处理的应用场景…

深度解析RocketMq源码-消费者索引ConsumeQueue

1.绪论 rocketmq的broker中关于消息持久化的组件主要包含三个&#xff0c;分别是&#xff1a;持久化消息到文件中的组件commitLog&#xff1b;根据消息key索引commitLog日志的indexFile&#xff1b;消费者根据topic和queueId查询commitLog日志的consumeQueue。前面已经介绍com…

使用QGIS进行研究区域制图实战

目录 前言 一、QGIS的版本和数据介绍 1、关于QGIS版本 2、需要准备的数据 二、准备制图 1、制作全国区位图 2、矢量和遥感信息的编辑 三、出图编辑 1、设置主题信息 2、打印布局制作 3、美化地图 总结 前言 俗话说“一图胜千言”&#xff0c;在地理信息的领域中&…

Feign:简化微服务通信的利器

介绍 1.1 什么是 Feign&#xff1f; Feign 是一个声明式、模板化的 HTTP 客户端&#xff0c;它简化了编写 Web 服务客户端的过程。它的主要目的是使 HTTP API 客户端的开发变得更加简单和直观。Feign 的设计理念是将 HTTP 客户端的细节隐藏在背后&#xff0c;使开发者可以专注…