From b191f10df5b67ba4256c086c673515cc897d98b1 Mon Sep 17 00:00:00 2001 From: Matthew Date: Fri, 12 Jul 2024 17:09:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=9F=AD=E4=BF=A1=E5=A4=84?= =?UTF-8?q?=E7=90=86=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xypower/mpmaster/sms/SimUtil.java | 64 ++++++++----------- .../com/xypower/mpmaster/sms/SmsReceiver.java | 45 ++++++++++++- .../xypower/mpmaster/sms/SmsSendReceiver.java | 5 ++ .../com/xypower/mpmaster/sms/SmsTypeEnum.java | 3 + 4 files changed, 78 insertions(+), 39 deletions(-) diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SimUtil.java b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SimUtil.java index fc04a500..c4899d19 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SimUtil.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SimUtil.java @@ -45,7 +45,7 @@ public class SimUtil { public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED"; public static final String SMS_DELIVER_ACTION = "android.provider.Telephony.SMS_DELIVER"; - //自定义ACTION常数 作为广播的IntentFilter识别常数 + // 自定义ACTION常数 作为广播的IntentFilter识别常数 public static String SMS_SEND_ACTION = "com.xypower.mpmaster.SMS_SEND_ACTION"; public static String SMSTYPE = "smstype"; @@ -53,8 +53,8 @@ public class SimUtil { public static String SMSIFCORRECT = "smsifcorrect"; //短信解析 - public static void analysisSMSInfo(Intent intent, Context context) { - SmsMessageModel smsInfo = getSMSInfo(intent); + public static void analysisSMSInfo(final Context context, final Intent intent, final SmsMessage smsMessage) { + SmsMessageModel smsInfo = getSMSInfo(intent, smsMessage); if (smsInfo != null) { String packageName = context.getApplicationContext().getPackageName(); String content = smsInfo.getContent(); @@ -71,15 +71,15 @@ public class SimUtil { ifmessageCorrect = true; sendtype = SmsTypeEnum.REBOOT1.value(); sendmessage = getSendString(content, ifmessageCorrect); - } else if (content.contains(SmsTypeEnum.REBOOT2.value())) { + } else if (content.contains(SmsTypeEnum.REBOOT2.value()) || content.contains(SmsTypeEnum.REBOOT3.value())) { ifmessageCorrect = true; sendtype = SmsTypeEnum.REBOOT2.value(); sendmessage = getSendString(content, ifmessageCorrect); - } else if (content.contains(SmsTypeEnum.RESTART_MP.value())) { + } else if (content.contains(SmsTypeEnum.RESTART_MP.value()) || content.contains(SmsTypeEnum.RESTART_MP2.value())) { ifmessageCorrect = true; sendtype = SmsTypeEnum.RESTART_MP.value(); sendmessage = getSendString(content, ifmessageCorrect); - } else if (content.contains(SmsTypeEnum.RESTART_MPMST.value())) { + } else if (content.contains(SmsTypeEnum.RESTART_MPMST.value()) || content.contains(SmsTypeEnum.RESTART_MPMST2.value())) { ifmessageCorrect = true; sendtype = SmsTypeEnum.RESTART_MPMST.value(); sendmessage = getSendString(content, ifmessageCorrect); @@ -658,39 +658,27 @@ public class SimUtil { } //短信解析 - public static SmsMessageModel getSMSInfo(Intent intent) { + public static SmsMessageModel getSMSInfo(final Intent intent, final SmsMessage smsMessage) { SmsMessageModel smsMessageModel = new SmsMessageModel(); - String action = intent.getAction(); - if (SMS_RECEIVED_ACTION.equals(action) || SMS_DELIVER_ACTION.equals(action)) { - Bundle bundle = intent.getExtras(); - if (bundle != null) { - StringBuilder content = new StringBuilder(); - String sender = ""; - String dateContent = ""; - Object[] pdus = (Object[]) bundle.get("pdus"); - if (pdus != null && pdus.length > 0) { - SmsMessage[] messages = new SmsMessage[pdus.length]; - for (int i = 0; i < pdus.length; i++) { - byte[] pdu = (byte[]) pdus[i]; - messages[i] = SmsMessage.createFromPdu(pdu); - } - for (SmsMessage message : messages) { - content.append(message.getMessageBody());// 得到短信内容 - // 得到发信息的号码 - sender = message.getOriginatingAddress(); - Date date = new Date(message.getTimestampMillis()); - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - format.setTimeZone(TimeZone.getTimeZone("GMT+08:00")); - dateContent = format.format(date); - } - int smsSlot = getSmsSlot(bundle); - smsMessageModel.setContent(content.toString()); - smsMessageModel.setSender(sender); - smsMessageModel.setDateContent(dateContent); - smsMessageModel.setSlot(smsSlot); - } - } - } + StringBuilder content = new StringBuilder(); + String sender = ""; + String dateContent = ""; + + content.append(smsMessage.getMessageBody());// 得到短信内容 + // 得到发信息的号码 + sender = smsMessage.getOriginatingAddress(); + Date date = new Date(smsMessage.getTimestampMillis()); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + format.setTimeZone(TimeZone.getTimeZone("GMT+08:00")); + dateContent = format.format(date); + + // smsMessage.getIndexOnSim() + int smsSlot = getSmsSlot(intent.getExtras()); + smsMessageModel.setContent(content.toString()); + smsMessageModel.setSender(sender); + smsMessageModel.setDateContent(dateContent); + smsMessageModel.setSlot(smsSlot); + return smsMessageModel; } diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsReceiver.java b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsReceiver.java index 72f2208b..e2053a72 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsReceiver.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsReceiver.java @@ -1,8 +1,17 @@ package com.xypower.mpmaster.sms; import android.content.BroadcastReceiver; +import android.content.ContentValues; import android.content.Context; import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.provider.Telephony; +import android.telephony.SmsMessage; +import android.util.Log; + +import java.text.SimpleDateFormat; +import java.util.Date; /** * 短信接收的监听的广播 @@ -11,9 +20,43 @@ import android.content.Intent; */ public class SmsReceiver extends BroadcastReceiver { + public static final String SMS_BUNDLE = "pdus"; + public static long mLastSmsTime = System.currentTimeMillis(); + private static final SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + @Override public void onReceive(Context context, Intent intent) { - SimUtil.analysisSMSInfo(intent,context); + try { + + if (intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) { + SmsMessage[] smsMessages = Telephony.Sms.Intents.getMessagesFromIntent(intent); + for (SmsMessage smsMessage : smsMessages) { + + if (smsMessage.getTimestampMillis() < mLastSmsTime) { + Date dt = new Date(smsMessage.getTimestampMillis()); + Log.i("SMS", "MSG @" + mSimpleDateFormat.format(dt) + " Dropped: " + smsMessage.getMessageBody()); + continue; + } + + mLastSmsTime = smsMessage.getTimestampMillis(); + SimUtil.analysisSMSInfo(context, intent, smsMessage); + + // smsMessage.get + String smsMessageId = ""; + ContentValues values = new ContentValues(); + values.put("read",true); + context.getContentResolver().update(Uri.parse("content://sms/inbox"),values, + "_id=" + smsMessageId, null); + } + } + + + + + + } catch (Exception ex) { + ex.printStackTrace(); + } } diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsSendReceiver.java b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsSendReceiver.java index 0940ce4a..4f8afc2c 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsSendReceiver.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsSendReceiver.java @@ -38,6 +38,11 @@ public class SmsSendReceiver extends BroadcastReceiver { Thread th = new Thread(new Runnable() { @Override public void run() { + try { + Thread.sleep(1000); + } catch (Exception ex) { + ex.printStackTrace(); + } try { processSms(context, intent, action, type); } catch (Exception ex) { diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsTypeEnum.java b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsTypeEnum.java index 30f203db..730323f5 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsTypeEnum.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsTypeEnum.java @@ -2,8 +2,11 @@ package com.xypower.mpmaster.sms; public enum SmsTypeEnum { REBOOT1("yw+at+stw21"), REBOOT2("at+stw21"), //重启命令 + REBOOT3("at-stw21"), //重启命令 RESTART_MP("at+restart=mpapp"), + RESTART_MP2("at-restart=mpapp"), RESTART_MPMST("at+restart=mpmaster"), + RESTART_MPMST2("at-restart=mpmaster"), SET_YW_SCHEDULE("yw+at+stw51"), //拍照时间表设置 GET_YW_SCHEDULE("yw+at+str51"), //查询拍照时间表 SET_OPERATE("yw+at+stw52"), //设置运维开关