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