From 9755d9eefb12f95fa45c785e526038e10c9c7115 Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期五, 25 四月 2025 18:15:51 +0800 Subject: [PATCH] 短信fix --- app/src/main/java/com/example/firstapp/receiver/SmsReceiver.kt | 150 ++++++++++++++++++++++++------------------------- 1 files changed, 73 insertions(+), 77 deletions(-) diff --git a/app/src/main/java/com/example/firstapp/receiver/SmsReceiver.kt b/app/src/main/java/com/example/firstapp/receiver/SmsReceiver.kt index fc12fec..dd3f62c 100644 --- a/app/src/main/java/com/example/firstapp/receiver/SmsReceiver.kt +++ b/app/src/main/java/com/example/firstapp/receiver/SmsReceiver.kt @@ -26,7 +26,10 @@ class SmsReceiver : BroadcastReceiver() { - + // 添加一个静态同步锁对象 + companion object { + private val syncLock = Any() + } // 安全防护关键词数组 private var securityKeywordsList = emptyList<String>() @@ -39,15 +42,9 @@ val messages = arrayOfNulls<SmsMessage>(pdus.size) val messageBody = StringBuilder() - // 获取短信时间戳(使用第一条短信的时间戳) - var timestamp: Long = 0 - for (i in pdus.indices) { messages[i] = SmsMessage.createFromPdu(pdus[i] as ByteArray) messageBody.append(messages[i]?.messageBody) - if (i == 0) { - timestamp = messages[i]?.timestampMillis ?: System.currentTimeMillis() - } } // 保存原始短信 @@ -76,82 +73,81 @@ val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) val createtime = sdf.format(date) - // 根据不同类型处理数据 - when (response.data.category) { - "快递" -> { - val code = CodeUtils.createExpressCode( - msgId = msgId, - createTime = createtime, - post = response.data.details.post, - company = response.data.details.company, - pickupCode = response.data.details.pickupCode, - address = response.data.details.address, - time = response.data.details.time, - smsTimestamp = timestamp // 添加短信时间戳 - ) - CodeUtils.saveCode(code) - } + // 使用同步块处理保存操作 + synchronized(syncLock) { + // 根据不同类型处理数据 + when (response.data.category) { + "快递" -> { + val code = CodeUtils.createExpressCode( + msgId = msgId, + createTime = createtime, + post = response.data.details.post, + company = response.data.details.company, + pickupCode = response.data.details.pickupCode, + address = response.data.details.address, + time = response.data.details.time + ) + CodeUtils.saveCode(code) + } - "还款" -> { - val code = CodeUtils.createRepaymentCode( - msgId = msgId, - createTime = createtime, - type = response.data.details.type, - bank = response.data.details.bank, - amount = response.data.details.amount, - date = response.data.details.date, - address = response.data.details.address, - minAmount = response.data.details.min_amount, - number = response.data.details.number, - smsTimestamp = timestamp // 添加短信时间戳 - ) - CodeUtils.saveCode(code) - } + "还款" -> { + val code = CodeUtils.createRepaymentCode( + msgId = msgId, + createTime = createtime, + type = response.data.details.type, + bank = response.data.details.bank, + amount = response.data.details.amount, + date = response.data.details.date, + address = response.data.details.address, + minAmount = response.data.details.min_amount, + number = response.data.details.number + ) + CodeUtils.saveCode(code) + } - "收入" -> { - val code = CodeUtils.createIncomeCode( - msgId = msgId, - createTime = createtime, - bank = response.data.details.bank, - amount = response.data.details.amount, - datetime = response.data.details.datetime, - address = response.data.details.address, - balance = response.data.details.balance, - smsTimestamp = timestamp // 添加短信时间戳 - ) - CodeUtils.saveCode(code) - } + "收入" -> { + val code = CodeUtils.createIncomeCode( + msgId = msgId, + createTime = createtime, + bank = response.data.details.bank, + amount = response.data.details.amount, + datetime = response.data.details.datetime, + address = response.data.details.address, + balance = response.data.details.balance + ) + CodeUtils.saveCode(code) + } - "航班" -> { - val code = CodeUtils.createFlightCode( - msgId = msgId, - createTime = createtime, - company = response.data.details.company, - start = response.data.details.start, - end = response.data.details.end, - seat = response.data.details.seat, - time = response.data.details.time, - address = response.data.details.address, - smsTimestamp = timestamp // 添加短信时间戳 - ) - CodeUtils.saveCode(code) - } + "航班" -> { + val code = CodeUtils.createFlightCode( + msgId = msgId, + createTime = createtime, + company = response.data.details.company, + start = response.data.details.start, + end = response.data.details.end, + seat = response.data.details.seat, + time = response.data.details.time, + address = response.data.details.address + ) + CodeUtils.saveCode(code) + } - "火车票" -> { - val code = CodeUtils.createTrainTicketCode( - msgId = msgId, - createTime = createtime, - company = response.data.details.company, - seat = response.data.details.seat, - time = response.data.details.time, - address = response.data.details.address, - trips = response.data.details.trips, - smsTimestamp = timestamp // 添加短信时间戳 - ) - CodeUtils.saveCode(code) + "火车票" -> { + val code = CodeUtils.createTrainTicketCode( + msgId = msgId, + createTime = createtime, + company = response.data.details.company, + seat = response.data.details.seat, + time = response.data.details.time, + address = response.data.details.address, + trips = response.data.details.trips + ) + CodeUtils.saveCode(code) + } + + else -> {} } } - // 发送广播通知数据已更新 val updateIntent = Intent("com.example.firstapp.DATA_UPDATED") context.sendBroadcast(updateIntent) -- Gitblit v1.9.3