From 2167ea58d1c297b0536d5cab6517707f1892b95f Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期五, 21 二月 2025 09:34:00 +0800
Subject: [PATCH] 登录;注册;关键字接口对接

---
 app/src/main/java/com/example/firstapp/MainActivity.kt |  119 ++++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 101 insertions(+), 18 deletions(-)

diff --git a/app/src/main/java/com/example/firstapp/MainActivity.kt b/app/src/main/java/com/example/firstapp/MainActivity.kt
index 9c9052d..df33c98 100644
--- a/app/src/main/java/com/example/firstapp/MainActivity.kt
+++ b/app/src/main/java/com/example/firstapp/MainActivity.kt
@@ -18,13 +18,20 @@
 import android.content.BroadcastReceiver
 import android.content.Context
 import android.content.Intent
+import android.net.Uri
 import androidx.lifecycle.ViewModelProvider
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
+import androidx.work.ExistingPeriodicWorkPolicy
+import androidx.work.PeriodicWorkRequestBuilder
+import androidx.work.WorkManager
+import com.example.firstapp.activity.LoginActivity
 import com.example.firstapp.adapter.MyAdapter
-import com.example.firstapp.core.Core
-import com.example.firstapp.entity.Item
 import com.example.firstapp.ui.home.HomeViewModel
+import com.example.firstapp.utils.Log
+import com.example.firstapp.workers.KeywordUpdateWorker
+import java.util.Calendar
+import java.util.concurrent.TimeUnit
 
 class MainActivity : AppCompatActivity() {
 
@@ -41,18 +48,23 @@
         if (isGranted) {
             // 权限授予后注册短信监听器
             registerSmsReceiver()
+            syncRecentSms()
         } else {
             // 权限拒绝,提示用户
             Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show()
         }
     }
 
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
         binding = ActivityMainBinding.inflate(layoutInflater)
         setContentView(binding.root)
-
+        setupViews()
+//        binding.btnLogout.setOnClickListener {
+//            logout()
+//        }
         // 在此位置初始化 homeViewModel
         homeViewModel = ViewModelProvider(this).get(HomeViewModel::class.java)
 
@@ -73,27 +85,14 @@
         if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != android.content.pm.PackageManager.PERMISSION_GRANTED) {
             // 请求权限
             permissionRequest.launch(Manifest.permission.READ_SMS)
+            syncRecentSms()
         } else {
             // 权限已经授予,继续执行相关操作
             registerSmsReceiver()
+            syncRecentSms()
         }
-
-
-        // 模拟数据
-//        val items = listOf(
-//            Item(1, "First Item", "This is the first item description"),
-//            Item(2, "Second Item", "This is the second item description"),
-//            Item(3, "Third Item", "This is the third item description")
-//        )
-//
-//        val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
-//        recyclerView.layoutManager = LinearLayoutManager(this)
-//        recyclerView.adapter = MyAdapter(items)
-
-//        var codeList = Core.code.getAllDesc()
         val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
         recyclerView.layoutManager = LinearLayoutManager(this)
-//        recyclerView.adapter = MyAdapter(codeList)
 
         // 初始化适配器
         adapter = MyAdapter()
@@ -124,8 +123,92 @@
     }
 
     private fun registerSmsReceiver() {
+//        应用启动时执行 registerSmsReceiver()
+//        创建 SmsReceiver 实例
+//        注册广播接收器,开始监听短信
+//        等待新短信到达
+//        新短信到达时,系统发送广播
+//        SmsReceiver 的 onReceive 方法被调用
+//        处理短信内容
+//        发送数据更新广播
+//        MainActivity 接收到更新广播
+//        更新 UI
+        Log.d("SMS_DEBUG", "MainActivity收到数据更新广播")
         smsReceiver = SmsReceiver()
         val filter = IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)
         registerReceiver(smsReceiver, filter)
     }
+
+    private fun setupKeywordUpdate() {
+        val updateRequest = PeriodicWorkRequestBuilder<KeywordUpdateWorker>(
+            1, TimeUnit.HOURS,  // 每小时更新一次
+            15, TimeUnit.MINUTES  // 灵活时间窗口
+        ).build()
+
+        WorkManager.getInstance(this).enqueueUniquePeriodicWork(
+            "keyword_update", ExistingPeriodicWorkPolicy.REPLACE, updateRequest
+        )
+    }
+
+    private fun setupViews() {
+        // 获取并显示当前登录的手机号
+        val phone =
+            getSharedPreferences("user_info", Context.MODE_PRIVATE).getString("phone", "") ?: ""
+
+//        binding.apply {
+//            tvPhone.text = "当前登录手机号:$phone"
+//        }
+    }
+
+    private fun logout() {
+        // 清除登录信息
+        getSharedPreferences("user_info", Context.MODE_PRIVATE)
+            .edit()
+            .clear()
+            .apply()
+
+        // 跳转回登录页
+        startActivity(Intent(this, LoginActivity::class.java))
+        finish()
+    }
+
+    private fun syncRecentSms() {
+        try {
+            val calendar = Calendar.getInstance()
+            calendar.add(Calendar.DAY_OF_YEAR, -3) // 获取3天前的时间
+            val threeDaysAgo = calendar.timeInMillis
+
+            val cursor = contentResolver.query(
+                Uri.parse("content://sms/sent"),
+                arrayOf("address", "body", "date"),
+                "date >= ?",
+                arrayOf(threeDaysAgo.toString()),
+                "date DESC"
+            )
+
+            cursor?.use {
+                while (cursor.moveToNext()) {
+                    val address = cursor.getString(cursor.getColumnIndexOrThrow("address"))
+                    val body = cursor.getString(cursor.getColumnIndexOrThrow("body"))
+                    val date = cursor.getLong(cursor.getColumnIndexOrThrow("date"))
+
+                    // 使用正则表达式提取验证码
+                    val regex = "\\d{4,6}".toRegex()
+                    val matchResult = regex.find(body)
+                    matchResult?.let { result ->
+                        val code = result.value
+                        // 使用 ViewModel 保存到数据库
+                        println("address")
+                        println(address)
+                        println(code)
+                        println(date)
+                       // homeViewModel.saveCode(address, code, date)
+                    }
+                }
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            Toast.makeText(this, "同步短信失败:${e.message}", Toast.LENGTH_SHORT).show()
+        }
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3