引入包
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.ORunningPlus
var 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 NotificationManager
Slog.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)