From 4c3fcf45f6014ca26e8fc9107eef917753ebbfd7 Mon Sep 17 00:00:00 2001
From: pppscn <35696959@qq.com>
Date: Fri, 24 Nov 2023 17:18:27 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E5=BD=A9=E4=BF=A1?=
=?UTF-8?q?=E8=BD=AC=E5=8F=91=E5=8A=9F=E8=83=BD=EF=BC=88TODO:=E8=A7=A3?=
=?UTF-8?q?=E6=9E=90=E5=BD=A9=E4=BF=A1=EF=BC=89=20#351?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/AndroidManifest.xml | 5 +
.../sms/forwarder/receiver/CallReceiver.kt | 1 -
.../forwarder/receiver/SimStateReceiver.kt | 5 +-
.../sms/forwarder/receiver/SmsReceiver.kt | 120 +++++++++---------
4 files changed, 66 insertions(+), 65 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index dcbc14ba..3a26f9ff 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -256,6 +256,11 @@
+
+
+
+
+
""
}
- val msgInfo = MsgInfo("sms", from, message, Date(), simInfo, simSlot, subscription)
+ val msgInfo = MsgInfo("sms", from, msg, Date(), simInfo, simSlot, subscription)
Log.d(TAG, "msgInfo = $msgInfo")
val request = OneTimeWorkRequestBuilder().setInputData(
@@ -146,55 +145,54 @@ class SmsReceiver : BroadcastReceiver() {
SmsCommandUtils.execute(context, smsCommand)
}
- private fun parseMMSContent(data: String, sender: String?) {
- // 在这里实现解析彩信内容的逻辑
- Log.d("MMSReceiver", "Received MMS from: $sender, Data: $data")
+ private fun handleMmsData(context: Context, data: ByteArray) {
+ try {
+ val mmsClass = Class.forName("android.telephony.gsm.SmsMessage")
+ val method = mmsClass.getDeclaredMethod("createFromPdu", ByteArray::class.java)
+ val pdus = arrayOf(data)
+ val messages = mutableListOf()
- val parts = data.split("\n\n") // 假设彩信内容以两个换行符 "\n\n" 分隔不同部分
- parts.forEach { part ->
- val lines = part.split("\n")
- var contentType: String? = null
- var content: String? = null
- var contentTransferEncoding: String? = null
-
- lines.forEach { line ->
- Log.d(TAG, "Line: $line")
- val keyValue = line.split(":")
- if (keyValue.size == 2) {
- val key = keyValue[0].trim()
- val value = keyValue[1].trim()
-
- when (key.toLowerCase()) {
- "content-type" -> contentType = value
- "content-transfer-encoding" -> contentTransferEncoding = value
- }
- }
+ for (pdu in pdus) {
+ val message = method.invoke(null, pdu)
+ message?.let { messages.add(it) }
}
- // 处理不同 MIME 类型的内容
- contentType?.let {
- when {
- it.startsWith("text") -> {
- // 文本内容
- content = lines.last() // 假设文本内容在当前部分的最后一行
- // 处理文本内容,例如展示在 TextView 中
- Log.d(TAG, "Text data: $content")
- }
+ // 处理 MMS 中的各个部分
+ for (message in messages) {
+ // 获取 MMS 的各个部分
+ val parts = message.javaClass.getMethod("getParts").invoke(message) as? Array<*>
- it.startsWith("image") -> {
- // 图片内容
- // 如果 contentTransferEncoding 表示 base64 编码
- if (contentTransferEncoding.equals("base64", true)) {
- content = lines.last() // 假设图片数据在当前部分的最后一行
- // 解码图片数据并展示或保存图片
- val decodedImage = android.util.Base64.decode(content, android.util.Base64.DEFAULT)
- // 处理解码后的图片数据
- Log.d(TAG, "Image data: $decodedImage")
+ // 遍历 MMS 的各个部分
+ parts?.forEach { part ->
+ // 获取部分的内容类型
+ val contentType = part?.javaClass?.getMethod("getContentType")?.invoke(part) as? String
+
+ // 处理文本部分
+ if (contentType?.startsWith("text/plain") == true) {
+ val text = part.javaClass.getMethod("getData").invoke(part) as? String
+ // 处理文本信息
+ if (text != null) {
+ Log.d(TAG, "Text: $text")
+ msg += text
}
}
- // 可以根据其他 MIME 类型继续添加处理逻辑,比如视频、音频等
+
+ // 处理图像部分
+ if (contentType?.startsWith("image/") == true) {
+ val imageData = part.javaClass.getMethod("getData").invoke(part) as? ByteArray
+ // 处理图像信息
+ if (imageData != null) {
+ // 在这里你可以保存图像数据或进行其他处理
+ Log.d(TAG, "Image data received")
+ }
+ }
+
+ // 其他部分的处理可以根据需要继续扩展
}
}
+
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}