From b80b1f9620f3919534b98ed1408268d89c6c2166 Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Mon, 29 Apr 2024 11:51:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=9B=91=E6=8E=A7=E7=94=B5=E9=87=8F=E2=80=94?= =?UTF-8?q?=E2=80=94=E4=BD=BF=E7=94=A8`hashcode`=E4=BF=9D=E8=AF=81`WorkMan?= =?UTF-8?q?ager`=E5=94=AF=E4=B8=80=20=20#458?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sms/forwarder/receiver/BatteryReceiver.kt | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/BatteryReceiver.kt b/app/src/main/java/com/idormy/sms/forwarder/receiver/BatteryReceiver.kt index a6706a0c..82cc6bc4 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/receiver/BatteryReceiver.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/BatteryReceiver.kt @@ -4,6 +4,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.os.BatteryManager +import androidx.work.ExistingWorkPolicy import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkManager import androidx.work.workDataOf @@ -62,16 +63,26 @@ class BatteryReceiver : BroadcastReceiver() { //充电状态改变 if (isPluggedChanged || isStatusChanged) { Log.d(TAG, "充电状态改变") - val request = OneTimeWorkRequestBuilder().setInputData( - workDataOf( - TaskWorker.CONDITION_TYPE to TASK_CONDITION_CHARGE, - "status_new" to statusNew, - "status_old" to statusOld, - "plugged_new" to pluggedNew, - "plugged_old" to pluggedOld, - ) - ).build() - WorkManager.getInstance(context).enqueue(request) + val inputData = workDataOf( + TaskWorker.CONDITION_TYPE to TASK_CONDITION_CHARGE, + "status_new" to statusNew, + "status_old" to statusOld, + "plugged_new" to pluggedNew, + "plugged_old" to pluggedOld, + ) + // 使用 hashcode 生成唯一的标识符 + val inputDataHash = inputData.hashCode().toString() + // 检查是否已经存在具有相同输入数据的工作 + val existingWorkPolicy = if (WorkManager.getInstance(context).getWorkInfosByTag(inputDataHash).get().isEmpty()) { + ExistingWorkPolicy.REPLACE + } else { + ExistingWorkPolicy.KEEP + } + val request = OneTimeWorkRequestBuilder() + .setInputData(inputData) + .addTag(inputDataHash) + .build() + WorkManager.getInstance(context).enqueueUniqueWork(inputDataHash, existingWorkPolicy, request) } }